当使用Vim时,如果给定一个填充有代码的目录(例如~/trunk/),其中包含多个子目录,是否有一种方法可以在整个源代码中grep/search文本/正则表达式实例?
目前我使用:
:lcd ~/trunk
:grep "pattern" *.py */*.py */*/*.py */*/*/*.py
(显然,我只限制在Python文件中搜索,这是另一个问题,但值得注意的是,理想情况下,我希望将搜索限制在特定扩展名的文件中。)
:vimgrep "pattern" ~/trunk/**/*.py
:copen 20
grep -IirlZ "pattern" .|xargs -0 vim
-I: ignore binary
-i: ignore case
-r: recursive
-l: print file name only
-Z: print \0 after each file name
:vimgrep
和:grep
。 :vimgrep
使用vim自己的模式搜索功能,并将所有文件读入vim缓冲区。默认情况下,:grep
链接到系统上的外部grep
实用程序,但您可以通过设置grepprg
选项来更改其行为。这是在线文档的链接:
http://vimdoc.sourceforge.net/htmldoc/quickfix.html#grep
在Vim技巧Wiki中的“在文件中查找Vim”提示中,有更多相关信息和其他选项:
将 grepprg
设置为 Ack,然后使用 :grep
命令进行 Ack 搜索。
或者使用 ctags。
vimgrep
仅打开一个文件并显示匹配项,而不是显示具有“可点击”匹配行的缓冲区。此外,它不支持递归。它毫无用处,我不知道为什么有人会更喜欢它而不是在命令行中使用普通的grep
,即使需要手动复制和打开其结果。 - Hi-Angel