【问题标题】:Prevent vim from escaping parantheses when using %:p使用 %:p 时防止 vim 转义括号
【发布时间】:2012-02-06 19:35:57
【问题描述】:

我在 vim 中创建了一个命令,使用以下命令在资源管理器中打开当前文件:
command! E silent !start explorer /select,"%:p"

如果我使用此命令尝试打开我的 _vimrc 文件(位于:C:\Program Files (x86)\Vim\_vimrc),它会打开错误的目录。似乎 %:p 在启动 Explorer 时正在转义 "x86" 周围的括号,这导致它试图导航到 C:\Program Files \(x86\)\Vim\_vimrc

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

另外,如果我尝试在命令中对路径进行硬编码,它会正确打开。这让我相信使用 !命令。

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

【问题讨论】:

    标签: windows vim explorer


    【解决方案1】:

    我不知道是否有办法这样做,但是在 any 脚本中使用!...% 是个坏主意,因为这是不可能的(至少在 POSIX 系统上,AFAIK 是在文件名中禁止使用 " 的 Windows 上则不然)。如果您需要将文件名传递给 shell 命令,请使用 :execute+shellescape()+expand():

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

    【讨论】:

    • 这正是我想要的。我曾考虑过在命令中以某种方式使用 expand() ,但不知道如何使其工作。由于某种原因,我没有想到使用 :execute。
    猜你喜欢
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    相关资源
    最近更新 更多