如何设置 vim :sh 命令产生的 shell 的环境变量
How to set environment variables of the shell resulting from the vim :sh command
我经常在Vim中使用:sh
去shell执行一些操作,然后我$ exit
到return回到我的Vim 会话。问题是,有时我回到一个选项卡,我忘记了我是否退出了 Vim 会话,如果我猜错了,输入 $ exit
将关闭选项卡或 SSH 连接,我'我不在 Vim 的子 shell 中。我希望能够在使用 :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)
然后根据$IN_VIM
是否非空做一些事情。
我经常在Vim中使用:sh
去shell执行一些操作,然后我$ exit
到return回到我的Vim 会话。问题是,有时我回到一个选项卡,我忘记了我是否退出了 Vim 会话,如果我猜错了,输入 $ exit
将关闭选项卡或 SSH 连接,我'我不在 Vim 的子 shell 中。我希望能够在使用 :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)
然后根据$IN_VIM
是否非空做一些事情。