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

时间:2010-06-24 09:17:12

标签: windows vim grep

我尝试将vim的内部grep与'**'通配符一起使用,如以下命令所示:

grep "test" **\*.txt

vim发出以下错误:

FINDSTR: Cannot open **\*.txt

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

grep "test" *.txt

我将反斜杠更改为正斜杠,但它也没有帮助:

grep "test" **\*.txt

这再次给出了上述错误。

可能是什么原因?

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

6 个答案:

答案 0 :(得分:5)

答案 1 :(得分:2)

安装cygwinmingw unxutils以获取grep(我使用cygwin)。将bin目录添加到PATH。

Habi said一样,添加到你的vimrc:

set grepprg=grep\ -nH

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

此外,如果您:help grep,您将获得grep和vimgrep之间差异的描述。 (速度与可移植性和灵活性。)

答案 2 :(得分:1)

您应该尝试vimgrep

答案 3 :(得分:1)

在Windows上,如果要挂钩findstr,可以使用

set grepprg=findstr\ /n\ /s

在.vimrc中,现在

:vimgrep methodname **/*.py相当于

:grep methodname *.py

两者都返回一个结果列表,您可以通过quickfix窗口导航(:copen:cn / :cp:cclose

根据我的经验,findstr比vimgrep快30倍,但是你的项目大小可能无关紧要,vimgrep的正则表达式可以使用得更好。

答案 4 :(得分:0)

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

如果您安装了替代模式匹配器(即MinGW或Cygwin的grep),则可以编辑vimrc文件以使用它。

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

'$ '是表达式的位置,末尾的''表示每种文件类型。 Grep足够快或我的代码库足够小,我不在乎限制文件类型。使用-n和-R标志会使其返回结果与vimgrep非常相似(显然模式表达式会有所不同)。

答案 5 :(得分:0)

**通过' grepprg'中指定的外部工具进行扩展,或者在Windows的情况下,由于grepprg只是findstr工具而未展开。

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

:grep /S pattern *.txt