2017-05-07 70 views
1

当我编辑vivim中的文件时,我经常会编辑该文件,然后我需要打开一个shell来执行shell命令。所以,我通过做:sh去壳。如何知道何时使用shell在vi中打开文件?

这将我带入壳。现在,当我想要返回到我正在编辑的文件时,我会频繁地执行control + D来返回文件。这工作正常。我按照说明here

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

有没有办法要么

  • 1)知道我目前在vi或
  • 2打开一个文件)退出shell并回到我的文件安全,而不用担心不小心关闭我的SSH会议?
+0

是否有一个原因,你不能发送vi到ctrl-z背景,做你的shell工作,然后用''fg''恢复vi? – user2141130

+0

我从来没有听说过这个命令!那将是真棒! – Sother

回答

4

它看起来像你遇到的问题不是试图找出vi是否正在运行,而是如何使用“作业控制”在父shell和vi之间跳转(grep用于bash中的作业控制或sh手册页)。

使用ctrl-z背景vi并使用fg来恢复。这适用于所有POSIX派生的shell,它通过ssh工作。

这是优于使用:sh和Ctrl-d,因为你避免您遇到的问题,你会得到你用,当你开始VI工作外壳一样,你少了一个shell中运行(这ISN”通常是一个性能问题,但是如果你有很多运行的shell,那么在需要时可以更容易地查看它们的PID)。

:sh可能还有其他一些原因,但我知道的唯一一个在vi会话中获取shell并非从一个shell开始。

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

+0

对这是正确的 – Sother

0

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

会给你在你的目录

打开您可以通过-u以及指定用户更多的过滤所有的常规文件。

相关问题