当我使用vi或vim编辑文件时,我经常会编辑该文件,然后需要打开一个shell来执行shell命令。因此,我通过执行:sh进入 shell 。
这使我无所适从。现在,当我想返回到我正在编辑的文件时,我将经常执行control + D以返回文件。这很好。我遵循了here的指示。
我在ssh -d进入的远程AWS机器上做了很多工作。而且,control+D是退出这些机器的一种方法。不幸的是,当ssh-d进入那些机器时,有时我不知道是否在vi/vim中打开了一个文件,当我执行control + D返回该文件时,它完全退出了ssh session 。
有没有办法
请您参考如下方法:
看来您遇到的问题不是想弄清楚vi是否正在运行,而是要如何使用“作业控制”(bash或sh手册页中的grep用于作业控制)在父shell和vi之间跳转。
使用ctrl-z作为背景vi,并使用fg恢复。这适用于所有POSIX派生的shell,并且可以在ssh上使用。
与避免使用:sh和ctrl-d相比,这是首选方法,因为这样可以避免遇到的问题,在启动vi时会得到与您正在使用的shell相同的shell,并且运行的shell少一些(这通常不是性能问题,但如果有很多运行的shell,则在需要时更容易查看它们的PID)。:sh可能还有其他原因,但是我所知道的唯一原因是在vi session 中获取了一个不是从shell开始的shell。
话虽如此,vi -r(不带参数)会打印一个交换文件列表,其中包含在vi中打开的文件集。像vi -r |& grep -B 3 'still running'这样的命令很有用。




