2012-02-06 45 views
2

我在VIM创建的命令用来打开当前文件在资源管理器中执行以下操作:
command! E silent !start explorer /select,"%:p"防止VIM使用%时:P

如果我用这个命令来尝试打开我的_vimrc文件(位于:C:\ Program Files文件(x86)\ Vim \ _vimrc)它打开了错误的目录。看起来,%:p在启动资源管理器时绕过“x86”的括号,导致它试图导航到C:\ Program Files \(x86 \)\ Vim \ _vimrc

我发现的部分很奇怪是,如果在vim中我输入以下命令:
:echo expand("%:p")
它打印路径而不会转义括号。

此外,如果我尝试硬编码命令中的路径正确打开。这导致我相信,当使用!时,使用vim解析%:p是一种奇怪的怪癖。命令。

有没有人知道一种方法来防止%:p在使用!时忽略括号。命令?我通读了%:p和:!的帮助,但无法找到任何解决此问题的方法。

回答

1

我不知道是否有一种方法可以做到这一点,但在任何脚本中使用!...%是一个糟糕的主意,因为它是不可能的(至少在POSIX系统,据我所知不是这样的窗口,其中"在文件名中被禁止)。如果你需要一个文件名传递给shell命令使用:execute + shellescape() + expand()

command! E :execute 'silent !start explorer /select,'.shellescape(expand('%:p'), 1) 
+0

这正是我一直在寻找。我曾想过在命令中使用expand(),但无法弄清楚如何使其工作。出于某种原因,我没有想到使用:execute。 – Pak 2012-02-08 14:39:28