使用 shell 如何知道何时在 vi 中打开文件?

How to know when you have a file open in vi while using the shell?

当我在vivim中编辑文件时,我经常会编辑文件,然后我需要打开一个shell执行一个shell 命令。所以,我通过 :sh.

进入 shell

这让我想到 shell。现在,当我想 return 到我正在编辑的文件时,我会经常 control + D 到 return 文件。这很好用。我按照说明 here.

我在 ssh-d 参与的远程 AWS 机器上做了很多工作。而且,control+D 是退出这些机器的一种方法。不幸的是,当 ssh-d 进入那些机器时,有时我不知道我是否在 vi/vim 中打开了一个文件,当我 control + D 返回文件时,它退出了我的 ssh 会话完全。

有没有办法

您可以使用lsof +D <dir> | grep REG

将为您提供在您的目录中打开的所有常规文件

要进行更多过滤,您也可以通过 -u 指定用户。

看起来你遇到的问题不是试图弄清楚 vi 是否是 运行,而是如何使用 "job control" 在父 shell 和 vi 之间跳转(在 bash 或 sh 手册页中用于作业控制的 grep)。

使用 ctrl-z 进入 vi 背景并使用 fg 恢复。这适用于所有 POSIX 派生的 shells 并且它适用于 ssh.

这比使用 :sh 和 ctrl-d 更可取,因为您可以避免遇到的问题,您得到的 shell 与您启动 vi 时使用的相同,并且您少一个 shell 运行(这通常不是性能问题,但如果您有很多 shell 运行,则在需要时更容易查看它们的 PID) .

:sh 可能还有其他原因,但我所知道的唯一原因是在不是从 shell 开始的 vi 会话中获得 shell .

话虽如此,vi -r(没有参数)打印交换文件列表,其中包含在 vi 中打开的文件集。 vi -r |& grep -B 3 'still running' 这样的命令很有用。