Answers:
在常规外壳中:
$ env | grep -i vim
EDITOR=vim
使用后 :shell
$ env | grep -i vim
EDITOR=vim
VIMRUNTIME=/usr/share/vim/vim80
VIM=/usr/share/vim
MYVIMRC=/home/martin/.vim/vimrc
所以它看起来像Vim的设置VIMRUNTIME
,VIM
以及MYVIMRC
环境变量。其中,VIM
对我来说似乎是最可靠的(您可能没有vimrc甚至vim运行时)。
您还可以设置自己的环境变量:
:let $HELLO = "test"
:shell
$ echo $HELLO
test
这对于传达有关您正在编辑的缓冲区的信息特别有用;例如:
:let $VIM_FILETYPE = &filetype
:let $VIM_FILENAME = expand('%:p')
将显示为:
VIM_FILETYPE=go
VIM_FILENAME=/home/martin/a.go
我在命令提示符下设置了一个红色的“ +”符号,该符号表示我是否在vim“:sh”中,而不是正常的shell会话。它的基石是“ $$”是当前进程的pid,因此:
MY_PPID=$(ps --no-header -o ppid -p $$) # Gets the pid of the parent
# process.
MY_PCMDLINE=$(ps --no-header -o cmd -p $MY_PPID) # Gets its command line.
MY_CMDDASH=$(awk '{print $1}' <<<$MY_PCMDLINE) # Gets the command name, possibly
# with a preceding hyphen.
MY_CMD=${MY_CMDDASH#-} # Get the bare command name.
一旦有了这个,就可以轻松地内联和构造类似于我在“ .bashrc”或类似文件中描述的内容。
注意:在别处描述的环境变量($ VIM)方法似乎比这更好,但是我将保留它,因为它可以识别您是否是任何东西的子进程(不仅仅是vim)。
:sh
:MYVIMRC,VIM和VIMRUNTIME。要知道您正在Vim的子外壳中运行,您要做的就是测试其中是否存在。
执行ps
或更好ps -fH
。例如:
$ ps -fH
UID PID PPID C STIME TTY TIME CMD
garyjohn 31140 31139 0 10:26 pts/11 00:00:00 bash
garyjohn 31267 31140 2 10:26 pts/11 00:00:00 vim hello.txt
garyjohn 31271 31267 0 10:26 pts/11 00:00:00 /bin/bash
garyjohn 31332 31271 0 10:26 pts/11 00:00:00 ps -fH
使用ps -fH
over just 的好处ps
是,它使您可以查看自己是否位于的子外壳中vim
或是否置于vim
背景中。在这种情况下,ps -fH
将如下所示:
$ ps -fH
UID PID PPID C STIME TTY TIME CMD
garyjohn 31140 31139 0 10:26 pts/11 00:00:00 bash
garyjohn 31267 31140 0 10:26 pts/11 00:00:00 vim hello.txt
garyjohn 31924 31140 0 10:29 pts/11 00:00:00 ps -fH