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

vim-如何在自动命令中使用环境变量,vim,Vim,Win7x32 gvim 7.4 我想调用批处理文件以响应VimLeave事件。 如果我的自动命令如下所示: au VimLeave * !c:\users\Sauron\vimfiles\cleanSession.cmd 它按预期工作。 我想用“~”或“$HOME”或类似的东西替换“c:\users\Sauron”,但还没有让它工作。我试过: au VimLeave * !$HOME\vimfiles\cleanSession.cmd au VimLeave * !%HOME%\vimf

Win7x32 gvim 7.4

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

au VimLeave * !c:\users\Sauron\vimfiles\cleanSession.cmd
它按预期工作。
我想用“~”或“$HOME”或类似的东西替换“c:\users\Sauron”,但还没有让它工作。我试过:

au VimLeave * !$HOME\vimfiles\cleanSession.cmd  
au VimLeave * !%HOME%\vimfiles\cleanSession.cmd  
au VimLeave * !~\vimfiles\cleanSession.cmd  
“%”已扩展为包含文件的名称。
$HOME不会被扩展。 我试过引用路径,但没有引用。
我忽略了什么?
谢谢--


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

@lcd047的答案在自动命令定义中扩展了
$HOME
;仅在调用时进行扩展更为常见。这也使得命令的语法更容易接受

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

au VimLeave * execute '!' . shellescape($HOME . '/vimfiles/cleanSession.cmd', 1)
从技术上讲,仅当路径包含特殊字符时才需要转义,这在这里不太可能,因此您还可以逃脱:

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