如何检测当前 (Bash) Shell 是否为 (Vi/Vim) 子 shell?

如何检测当前 (Bash) Shell 是否为 (Vi/Vim) 子 shell?

在 Vi/Vim 中,我可以输入:

:shell

掉进壳里。

有什么方法可以检测我是否处于 Vi 生成的子 shell 中?

环境变量 SHLVL 为 2,但这并没有明确告诉我我处于维姆- 生成的子 shell。

在 OS X 上,还设置了以下变量:MYVIMRC,,VIMRUNTIMEVIM

这些有多通用?我可以指望这些在任何系统中设置,当且仅当我在 Vi/Vim 子 shell 中时?

如果没有,是否有任何可移植、强大且有效的方法来判断我处于 Vi/Vim 子 shell 中?

谢谢。

答案1

我在装有 Vim 7.2 的 Ubuntu 9.10 中以及装有 Vim 7.2 的 Cygwin 1.7 中看到了相同的变量。

这是文档。

请注意,MYVIMRC如果没有.vimrc文件,则可能不存在。

答案2

我不太了解 OSX,但如果它有一个 /proc 文件系统,您可能可以检查父进程的名称,如下所示:

parent=$(</proc/$PPID/exename)
if expr match $parent $(which vim) > /dev/null
then
    ...
fi

相关内容