当使用Vim,并给出一个充满代码的目录(例如〜/ trunk /)和许多子目录时,有没有办法在整个源代码中grep /搜索文本/正则表达式的实例? / p>
目前我使用:
:lcd ~/trunk
:grep "pattern" *.py */*.py */*/*.py */*/*/*.py
(显然我将此限制为Python文件,这是一个不同的问题,但值得注意的是,理想情况下我想将搜索限制为具有特定扩展名的文件。)
答案 0 :(得分:39)
:vimgrep "pattern" ~/trunk/**/*.py
:copen 20
如果你有一个很大的项目,我建议你使用cscope和vim plugins。这是一个旨在处理大项目的项目:SourceCodeObedience
有关grep text使用SourceCodeObedience的方法的简要说明。
答案 1 :(得分:7)
我直接使用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
答案 2 :(得分:6)
您可能需要在vim文档中查看:vimgrep
和:grep
。 :vimgrep
使用vim自己的模式搜索功能,并将所有文件读入vim缓冲区。默认情况下,:grep
会链接到系统上的外部grep
,但您可以通过设置grepprg
选项来更改行为。这是在线文档的链接:
http://vimdoc.sourceforge.net/htmldoc/quickfix.html#grep
关于这方面的更多信息以及Vim Tips Wiki中“在Vim中查找文件”提示中的其他一些选项:
答案 3 :(得分:4)
将grepprg
设置为Ack,然后使用:grep
搜索Ack。
或使用ctags。
答案 4 :(得分:3)
Ag
是递归搜索模式的不错选择。
答案 5 :(得分:2)
您可以使用:vimgrep,即:
:vimgrep /pattern/ **/*.py
检查此Vim提示:
另外看看grep.vim,它是一个插件,它将grep,fgrep,egrep和agrep工具与Vim集成,并允许您在一个或多个文件中搜索模式并跳转 给他们......
答案 6 :(得分:1)
您可以使用ctags生成源代码索引,然后VIM可以use this无缝地导航您的代码库。它的源代码知道,你可以直接跳转到方法声明等。
您需要经常重新生成ctags文件,但您可以在make过程中执行此操作。它应该非常快,除非你的代码库很大。
答案 7 :(得分:0)
没有人提及它,但如今我倾向于使用ripgrep