繁体   English   中英

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

[英]Vim: grep's wildcard doesn't work in windows

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

grep "test" **\*.txt

vim给出以下错误:

FINDSTR: Cannot open **\*.txt

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

grep "test" *.txt

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

grep "test" **\*.txt

这再次给出了上述错误。

可能是什么原因?

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

在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)。

安装cygwinmingw 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倍,但是你的项目大小可能无关紧要, vimgrep的正则表达式可以使用得更好。

注意: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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM