如何设置由vim:sh命令产生的shell的环境变量



我经常在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是否为非空来执行某些操作。

最新更新