我在运行 OS X。在 vim 上,如果你执行:sh
命令,你可以进入 shell 来执行命令。我经常忘记我是否在这个 shell 中。
有什么方法可以检查我是否处于来自 vim 的 shell 中?
答案1
env | grep vim
列出 vim 传递给 shell 的环境变量。VIMRUNTIME
如果您还没有从 vim 启动 shell,我怀疑它是否已定义。
答案2
我输入ps
(不带任何选项)并查看 vim 是否列出。
答案3
您可以查看 shell 父进程的命令名称:ps -o comm= -p $PPID
。例如,您可以更改提示以包含父进程 ID。
此外,如果您只想在未直接在终端仿真器内运行的 shell 中更改提示符,您可以通过检查 shell 的控制终端是否与其父进程的控制终端相同来测试这一点。如果父进程是终端仿真器,则它不会有自己的终端作为控制终端。
例如,如果你在~/.kshrc
或~/.bashrc
或中输入以下几行~/.zshrc
(选择适合你的 shell 的一行),{vim}
并且 shell 在 下运行,你的提示符将以 开始vim
:
parent_command=$(ps -o comm= -p $PPID)
parent_command=${parent_command##*/}
if [ "$(ps -o tty= -p $$)" = "$(ps -o tty= -p $PPID)" ]; then
# Not running directly under a terminal emulator
PS1="{$parent_command}$PS1"
fi
您可能还对以下讨论感兴趣如何知道我所处的 shell 的“级别”?。
答案4
您可以使用 MacVim (http://code.google.com/p/macvim/)。无论你的 shell 是否来自 vim 实例,这一点都很明显,因为你的 shell 位于 MacVim 窗口而不是终端窗口中。