我经常在Vim中使用:sh
来访问shell并执行一些操作,然后使用$ exit
返回到我的Vim会话。问题是,有时我会回到一个选项卡,忘记我是否退出了Vim会话,如果我猜错了,并且我不在Vim的子shell中,那么键入$ exit
将关闭选项卡或SSH连接。当用:sh
从Vim打开子shell时,我希望能够设置shell的一些特殊环境变量。有办法做到这一点吗?
我在想:sh ENVVAR="vim is open!"
之类的东西,如果设置了变量,我可以在PS1中显示ENVVAR,但这似乎不起作用。
您可以使用let
来设置环境变量。只需在变量的名称前面加上$
。
:let $ENVVAR = 'vim is open!'
:sh
$ echo $ENVAR
vim is open!
参见:help :let-environment
。当然,您可以将let
命令放在您的vimrc中。此外,vim自己设置一些环境变量,您也可以从shell中查询这些变量:
:sh
$ env | grep VIM
VIMRUNTIME=/usr/share/vim/vim81
VIM=/usr/share/vim
MYVIMRC=/home/user/.vimrc
假设您在Linux或macOS(或类似的操作系统(上运行,您可以通过以下操作获得父进程名称:
ps -p $PPID -o comm=
所以你可以在你的shell配置中添加一些东西,比如:
IN_VIM=$(ps -p $PPID -o comm= | grep -qsE '[gm]?vim' && echo 1)
然后根据CCD_ 10是否为非空来执行某些操作。