有没有办法在文件夹中搜索一些文本并在 Vim 中的单独缓冲区中显示搜索结果?(如 Sublime TextCtrl + Shift + F
结果)
3 回答
不,您不需要任何插件。默认: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
)
听起来你需要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] 将打开文件,并将光标放在匹配的行上。
Vim 命令将:grep
搜索委托给外部grep
工具(或兼容的替代工具,例如ack
,通过设置'grepprg'
)。或者,您可以使用:vimgrep
,它在 Vim 中执行搜索。这允许使用相同的 Vim 风格的正则表达式和 glob 模式(如**/
),但它通常较慢,因为每个文件都被读入 Vim 缓冲区。
这两个命令都在快速修复窗口中显示结果,您可以从中导航到匹配项。
您不需要任何插件,尽管有几个可用的插件试图使处理更简单或支持不同的搜索命令(例如已经提到的ack.vim)。