11

有没有办法在文件夹中搜索一些文本并在 Vim 中的单独缓冲区中显示搜索结果?(如 Sublime TextCtrl + Shift + F结果)

4

3 回答 3

26

不,您不需要任何插件。默认:vimgrep(或:vim)就是您所需要的。

foo在当前目录的每个文件中搜索:

:vim foo * | cw

foo在当前目录的每个 JavaScript 文件中搜索:

:vim foo *.js | cw

foo在当前目录中的每个 JavaScript 文件中递归搜索:

:vim foo **/*.js | cw

在当前目录的每个文件中搜索当前单词:

:vim <C-r><C-w> * | cw
:vim <cword> * | cw

(编辑:使用:cw[indow]代替:copen

于 2012-09-21T08:15:49.300 回答
9

听起来你需要ack.vim

这个插件是 Perl 模块 App::Ack 的前端。Ack 可以替代 99% 的 grep 使用。这个插件将允许您从 vim 运行 ack,并在拆分窗口中显示结果。

用法:

:Ack [options] {pattern} [{directory}]
Search recursively in {directory} (which defaults to the current directory) for the {pattern}.

包含搜索词的文件将与出现的行号一起在拆分窗口中列出,每次出现一次。在此窗口中的一行上按 [Enter] 将打开文件,并将光标放在匹配的行上。

于 2012-09-21T07:51:15.333 回答
5

Vim 命令将:grep搜索委托给外部grep工具(或兼容的替代工具,例如ack,通过设置'grepprg')。或者,您可以使用:vimgrep,它在 Vim 中执行搜索。这允许使用相同的 Vim 风格的正则表达式和 glob 模式(如**/),但它通常较慢,因为每个文件都被读入 Vim 缓冲区。

这两个命令都在快速修复窗口中显示结果,您可以从中导航到匹配项。

您不需要任何插件,尽管有几个可用的插件试图使处理更简单或支持不同的搜索命令(例如已经提到的ack.vim)。

于 2012-09-21T08:15:19.020 回答