如何检查它是否';它仍处于Vim外壳模式

如何检查它是否';它仍处于Vim外壳模式,vim,Vim,在vim中,键入:sh将切换到shell,而exit可以退出shell并返回vim。是否有命令检查它是否处于vim外壳模式?这样我就不会意外地再次打开同一个文件。我希望避免以下情况: vim myfile>:sh>exit>vim myfile//获取另一个vim实例正在编辑同一文件的警告 这些是正常情况: vim myfile>:sh>退出//继续编辑 vim myfile>:wq>vim myfile//继续编辑vim中的:sh命令似乎定义了VIMRUNTIME、vim和MYVIMRC环境变

在vim中,键入:sh将切换到shell,而exit可以退出shell并返回vim。是否有命令检查它是否处于vim外壳模式?这样我就不会意外地再次打开同一个文件。我希望避免以下情况:

vim myfile>:sh>exit>vim myfile
//获取另一个vim实例正在编辑同一文件的警告

这些是正常情况:
vim myfile>:sh>退出
//继续编辑

vim myfile>:wq>vim myfile
//继续编辑vim中的
:sh
命令似乎定义了
VIMRUNTIME
vim
MYVIMRC
环境变量,因此您只需检查它们是否已定义。为此,您可以运行
echo$VIM
,例如,它应该在普通shell中返回空行,在从
VIM

运行的shell中返回类似
/usr/share/VIM
的内容。除了@a3nm answer之外,您还可以

  • 使用
    pstree-h
    :它将输出当前分支高亮显示的进程树,您需要检查的是高亮显示中是否有vim
  • 另一种可能性是
    ps t
    :当您在
    :sh
    内时,它将显示使用当前终端的所有进程,并应在列表中显示
    vim
    ps-oargs t
    在您想知道运行vim时使用的参数时可能更有用
  • 这些方法更可靠,因为您可以覆盖
    VIMRUNTIME
    VIM
    MYVIMRC
    环境变量,以便进行一些定制(顺便说一句,它们是由VIM定义的,用于vimscripts中,而不是由
    :sh
    )。它们还适用于允许您运行子shell但不定义任何环境变量的其他进程

    我也建议在正常模式或代码>中考虑使用<代码> <代码>:暂停< /代码> />代码>:在EX中停止< /代码>,因为这些使用的shell VIM是从新创建的,而不是创建新的。通过此行为,您可以访问在运行vim之前键入的命令的历史记录,还可以编写更复杂和耗时的shell配置,而无需每次等待

    在使用
    的情况下,这两种方法仍然有效,但第一种方法不会突出显示vim,因为它将与
    pstree
    本身处于同一级别(具有相同的父级),可能正好位于图中
    pstree
    的下方或上方。这还启用了第三种方法:
    jobs
    shell内置

    为了从
    进行恢复,您应该使用
    fg
    (在zsh和bash中使用一个
    %
    ),它比
    退出
    更容易键入(但比
    更多)