vim - 如何在自动命令中使用环境变量

时间:2015-06-02 18:31:53

标签: vim

Win7x32 gvim 7.4

我想调用一个批处理文件来响应VimLeave事件 如果我的自动命令如下所示:

au VimLeave * !c:\users\Sauron\vimfiles\cleanSession.cmd

它按预期工作。
我想替换' c:\ users \ Sauron'用'〜'或者' $ HOME'或类似的东西,但没有得到它的工作。我试过了:

au VimLeave * !$HOME\vimfiles\cleanSession.cmd  
au VimLeave * !%HOME%\vimfiles\cleanSession.cmd  
au VimLeave * !~\vimfiles\cleanSession.cmd  

'%'被扩展为包含文件的名称 $ HOME不会扩展。 我试过引用这条路,而不是。
我在俯视什么? 谢谢 -

2 个答案:

答案 0 :(得分:1)

exec 'au VimLeave * !' . fnameescape($HOME . '/vimfiles/cleanSession.cmd')

欢迎来到Vim命令模式语法的精彩世界。 :)

答案 1 :(得分:1)

@ lcd047的答案在autocommand 定义中展开$HOME ;只在调用扩展时更常见。这也使得命令的语法稍微容忍一些。

此外,fnameescape()不是正确的功能;对于:!,应使用shellescape()(带有可选的{special}参数):

au VimLeave * execute '!' . shellescape($HOME . '/vimfiles/cleanSession.cmd', 1)

从技术上讲,只有当路径包含特殊字符时才需要转义,这在这里不太可能,所以你也可以逃脱:

au VimLeave * execute '!' . $HOME . '/vimfiles/cleanSession.cmd'