43

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

目前我使用:

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

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

4

8 回答 8

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

如果你有一个相当大的项目,我建议你使用cscopevim 插件。这是一个专为处理大型项目而设计的:SourceCodeObedience

有一个关于如何使用SourceCodeObedience grep 文本的简要说明。

于 2009-03-29T17:57:12.203 回答
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
于 2009-03-29T17:57:43.167 回答
6

您可能需要查看:vimgrep并查看:grepvim 文档。 :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

于 2009-03-29T18:01:51.770 回答
4

设置grepprgAck,然后使用:grepAck 进行搜索。

或者使用 ctags。

于 2009-03-30T22:29:48.793 回答
3

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

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

于 2015-06-14T07:04:45.670 回答
2

您可以使用:vimgrep即:

  :vimgrep /pattern/ **/*.py

检查这个 Vim 提示:

还可以看看grep.vim,它是一个插件,将 grep、fgrep、egrep 和 agrep 工具与 Vim 集成在一起,允许您在一个或多个文件中搜索模式并跳转到它们...

于 2009-03-29T17:55:31.363 回答
1

您可以使用ctags生成源代码索引,然后 VIM 可以使用它在您的代码库中无缝导航。它具有源代码意识,您可以直接跳转到方法声明等。

您需要每隔一段时间重新生成 ctags 文件,但您可以将其作为 make 过程的一部分。除非您的代码库很大,否则它应该很快。

于 2009-03-29T21:14:57.343 回答
0

没有人提到它,但我现在倾向于使用ripgrep

于 2020-09-14T12:41:00.713 回答