我尝试将vim的内部grep与'**'
通配符一起使用,如以下命令所示:
grep "test" **\*.txt
vim发出以下错误:
FINDSTR: Cannot open **\*.txt
当我删除'**'
通配符时,该命令正常工作:
grep "test" *.txt
我将反斜杠更改为正斜杠,但它也没有帮助:
grep "test" **\*.txt
这再次给出了上述错误。
可能是什么原因?
注意:我在Microsoft Windows XP上使用GVim 7.2。
答案 0 :(得分:5)
答案 1 :(得分:2)
安装cygwin,mingw,或 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