由于某种原因,我无论如何也想不出在使用 vim 时如何将单引号传递给外部工具。例如,我可能想调用 Vim 的外部 grep 来搜索文本“foo”(即,单引号后面是单词 foo)
因此我可能会尝试以下命令:
:grep \"foo *.txt
但这会导致以下错误消息:
!findstr /n \"foo *.txt >C:\Users\[username]\AppData\Local\Temp\VIeC244.tmp 2>&1
shell returned 1
E40: Can't open errorfile C:\Users\[username]\AppData\Local\Temp\VIeC244.tmp
请注意,由于我使用的是 Windows,因此 grep 已更改为使用“findstr /n”(可以通过运行来验证echo &grepprg
)。我发现,如果我自己从命令行输入以下内容,我可以轻松执行我想要的搜索:
findstr /n \"foo *.txt
效果和我预期的一样
答案1
您可以尝试暂时(或永久)将“shellxquote”设置为单引号字符,例如:set shellxquote=\"
请注意,这将破坏使用特殊字符(如 &、|、<、> 等)的一些外部命令(默认情况下,shellxescape 中的所有内容都是如此),因此您可能需要将其保留为该值。但是,看起来这是 Vim 7.3.450 中默认 shellxquote 值被破坏的地方之一。