2012-02-29 150 views
4

我想在vim启动时用特定目录根打开NERDTree,具体取决于环境变量。如何在.vimrc中正确使用未定义的环境变量?

设置环境变量将正确展开,如$HOMEdocumentation states undefined variables will expand to an empty string

所以这一个正常工作与NERD_TREE_ROOT设置为一个现有的目录。但如果它是未定义的,则不会。相反,$NERD_TREE_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 

如果这是不可能的,但它会做。

回答

5

什么你观察有没有关系EVAL或表达式:因为执行数值运算变成是当两个变量echo eval('$HOME/$NERD_TREE_ROOT')结果-2147483648就像echo 0/0零。由于在:NERDTree命令定义中存在-complete=dir,因此$HOME的扩展由vim执行。这是相当意想不到的,顺便说一下,这是第三种扩展类型::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) 

。这是扩展按照文档中描述的唯一情况,因为它是存在任何表达式的唯一方式。

+0

啊,很好,exec做到了。感谢您的解释。 – 2012-03-05 10:30:55

4

测试它是否autocmd之前是空的:

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

这就是我想要避免的,因为它使得预期的单线划线变成五线划线。 – 2012-02-29 14:14:29

+0

你可以使用**'|'(bar)**来使它成为一行 – kev 2012-02-29 14:27:41

+0

娜,那就是作弊;) – 2012-02-29 16:15:54

相关问题