Vim:grep的通配符在windows中不起作用

我尝试使用vim的内部grep'**'通配符,如下面的命令:

 grep "test" **\*.txt 

vim给出了以下错误:

 FINDSTR: Cannot open **\*.txt 

当我删除'**'通配符时,命令正常工作:

 grep "test" *.txt 

我把反斜杠改为正斜杠,但是也没有帮助:

 grep "test" **\*.txt 

这又给了上述错误。

可能是什么原因?

注意:我在Microsoft Windows XP上使用GVim 7.2。

Solutions Collecting From Web of "Vim:grep的通配符在windows中不起作用"

在XP下的Vim中执行“:grep”默认不使用“grep.exe”。 默认使用“FINDSTR”,它是Windows安装的一部分。 “FINDSTR”与grep不兼容。 由于这个,你会得到错误信息

 FINDSTR: Cannot open **\*.txt 

请参阅“:help grepprg”。

如果你想使用grep的Windows端口,你必须安装它,因为grep既不是Windows的一部分,也不是Vim安装的一部分。

但是由于7.0 Vim有一个名为vimgrep的内部grep。 有关详细信息,请参阅“:help vimgrep”。

您必须相应地设置“grepprg”,以便使用grep或vimgrep(而不是默认的FINDSTR)。

安装cygwin , mingw unxutils来获得grep(我使用cygwin)。 将bin目录添加到您的PATH。

像Habi说的那样 ,加入你的vimrc:

 set grepprg=grep\ -nH 

(这是* nix默认使用的grep。)

另外,如果你:help grep ,你会得到grep和vimgrep之间的区别的描述。 (速度与便携性和灵活性。)

你应该尝试vimgrep

在Windows上,如果你想挂钩到更快的findstr你可以使用

set grepprg=findstr\ /n\ /s

在你的.vimrc和现在

:vimgrep methodname **/*.py等同于

:grep methodname *.py

两者都返回可以在quickfix窗口( :copen:cn / :cp:cclose )中导航的结果列表。

根据我的经验,findstr的速度比vimgrep快30倍,但是可能与你的项目大小vimgrepvimgrep的正则表达式使用得更好。

请注意:grep不是vim的内部grep(即:vimgrep),而是外部grep程序的包装器。

如果你有一个替代的模式匹配器(即,MinGW的或Cygwin的grep),你可以编辑你的vimrc文件来使用它。

 set grepprg=C:/MinGW/msys/1.0/bin/egrep\ -nR\ $*\ * 

'$ '是你的表达将去的地方,' '在结尾意味着每个文件类型。 grep足够快,或者我的代码库足够小,我不在意限制文件类型。 使用-n和-R标志将使其返回结果非常像vimgrep(显然,模式表达式将不同)。

**由“grepprg”中指定的外部工具扩展,或者在Windows的情况下扩展,因为grepprg只是findstr工具。

但是,你在Vim的命令行上传递的任何参数也会转到工具上,所以只需执行递归findtr搜索:

 :grep /S pattern *.txt