如何正确使用.vimrc中未定义的环境变量?

如何正确使用.vimrc中未定义的环境变量?,vim,environment-variables,Vim,Environment Variables,我想在vim启动时打开NERDTree,具体目录根取决于环境变量 设置的环境变量将正确展开,如$HOME。这个 因此,如果将NERD\u TREE\u ROOT设置为现有目录,则此选项可以正常工作。但如果未定义,则不会。相反,$NERD\u TREE\u ROOT将像字符串一样使用 autocmd VimEnter * NERDTree $HOME/$NERD_TREE_ROOT 如何将未定义的环境变量正确用作空字符串 编辑:澄清一下。这就是我想要避免的: if empty($NERD_TRE

我想在vim启动时打开NERDTree,具体目录根取决于环境变量

设置的环境变量将正确展开,如
$HOME
。这个

因此,如果将
NERD\u TREE\u ROOT
设置为现有目录,则此选项可以正常工作。但如果未定义,则不会。相反,
$NERD\u TREE\u ROOT将像字符串一样使用

autocmd VimEnter * NERDTree $HOME/$NERD_TREE_ROOT
如何将未定义的环境变量正确用作空字符串

编辑:澄清一下。这就是我想要避免的:

if empty($NERD_TREE_ROOT)
    autocmd VimEnter * NERDTree $HOME
else
    autocmd VimEnter * NERDTree $HOME/$NERD_TREE_ROOT
endif

如果不可能,它也会这样做。

autocmd
之前测试它是否为空:

if !empty($NERD_TREE_ROOT)
    autocmd VimEnter * NERDTree $HOME/$NERD_TREE_ROOT
endif

您观察到的内容与eval或表达式无关:
echo eval(“$HOME/$NERD_TREE_ROOT”)
会产生
-2147483648
,就像
echo 0/0
一样,因为执行数值操作时两个变量都是零。由于
:NERDTree
命令定义中存在
-complete=dir
,因此vim执行
$HOME
的扩展。这是相当出乎意料的,顺便说一下,这是第三种扩展:
:echo expand(“$HOME/$NERD_TREE_ROOT”)
导致
$HOME/$NERD_TREE_ROOT
:echo expand(“$HOME/$HOME”)
导致
/HOME/zyx//HOME/zyx
。我看不出有什么办法可以解决这个问题,但你总能做到

execute 'autocmd VimEnter * NERDTree '.fnameescape($HOME.'/'.$NERD_TREE_ROOT)

。这是文档中描述的唯一一种扩展方式,因为这是存在任何表达式时的唯一方式。

这是我想要避免的,因为它将预期的一行变成了五行。您可以使用
|
(bar)将其变成一行。很好,exec做到了这一点。谢谢你的解释。