![Vim:如何在 Windows 上使用外部 grep 搜索引号?](https://linux22.com/image/1377876/Vim%EF%BC%9A%E5%A6%82%E4%BD%95%E5%9C%A8%20Windows%20%E4%B8%8A%E4%BD%BF%E7%94%A8%E5%A4%96%E9%83%A8%20grep%20%E6%90%9C%E7%B4%A2%E5%BC%95%E5%8F%B7%EF%BC%9F.png)
由于某种原因,我无论如何也想不出在使用 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 值被破坏的地方之一。