使用 Vim 时,给定一个充满代码的目录(例如 ~/trunk/)和许多子目录,有没有办法在整个源代码中 grep/搜索文本/正则表达式的实例?
目前我使用:
:lcd ~/trunk
:grep "pattern" *.py */*.py */*/*.py */*/*/*.py
(显然我将其限制为 Python 文件,这是一个不同的问题,但值得注意的是,理想情况下,我希望将搜索限制为具有特定扩展名的文件。)
:vimgrep "pattern" ~/trunk/**/*.py
:copen 20
如果你有一个相当大的项目,我建议你使用cscope和vim 插件。这是一个专为处理大型项目而设计的:SourceCodeObedience
有一个关于如何使用SourceCodeObedience grep 文本的简要说明。
我直接使用 grep 。
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
vim 文档。 :vimgrep
使用 vim 自己的模式搜索功能并将所有文件读入 vim 缓冲区。 :grep
默认情况下链接到系统上的外部grep
实用程序,但您可以通过设置 grepprg
选项来更改行为。这是在线文档的链接:
http://vimdoc.sourceforge.net/htmldoc/quickfix.html#grep
在 Vim Tips Wiki 的“在 Vim 中查找文件”的提示中有更多信息以及其他一些选项:
设置grepprg
为Ack,然后使用:grep
Ack 进行搜索。
或者使用 ctags。
Ag
是递归搜索模式的好选择。
您可以使用ctags生成源代码索引,然后 VIM 可以使用它在您的代码库中无缝导航。它具有源代码意识,您可以直接跳转到方法声明等。
您需要每隔一段时间重新生成 ctags 文件,但您可以将其作为 make 过程的一部分。除非您的代码库很大,否则它应该很快。
没有人提到它,但我现在倾向于使用ripgrep