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不会扩展。
我试过引用这条路,而不是。
我在俯视什么?
谢谢 -
答案 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'