Vim:如何在 Windows 上使用外部 grep 搜索引号?

Vim:如何在 Windows 上使用外部 grep 搜索引号?

由于某种原因,我无论如何也想不出在使用 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 值被破坏的地方之一。

相关内容