你如何在Vim中搜索所有源代码?

时间:2009-03-29 17:46:44

标签: vim grep

当使用Vim,并给出一个充满代码的目录(例如〜/ trunk /)和许多子目录时,有没有办法在整个源代码中grep /搜索文本/正则表达式的实例? / p>

目前我使用:

:lcd ~/trunk
:grep "pattern" *.py */*.py */*/*.py */*/*/*.py

(显然我将此限制为Python文件,这是一个不同的问题,但值得注意的是,理想情况下我想将搜索限制为具有特定扩展名的文件。)

8 个答案:

答案 0 :(得分:39)

:vimgrep "pattern" ~/trunk/**/*.py
:copen 20

如果你有一个很大的项目,我建议你使用cscopevim 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中查找文件”提示中的其他一些选项:

http://vim.wikia.com/wiki/Find_in_files_within_Vim

答案 3 :(得分:4)

grepprg设置为Ack,然后使用:grep搜索Ack。

或使用ctags。

答案 4 :(得分:3)

Ag是递归搜索模式的不错选择。

https://github.com/rking/ag.vim

答案 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