有没有办法在文件夹中搜索某些文本并在Vim的单独缓冲区中显示搜索结果? (与Sublime Text Ctrl + Shift + F
结果一样)
答案 0 :(得分:23)
不,你不需要任何插件。默认:vimgrep
(或:vim
)就是您需要的。
在当前目录的每个文件中搜索foo
:
:vim foo * | cw
在当前目录中的每个JavaScript文件中搜索foo
:
:vim foo *.js | cw
以递归方式搜索当前目录中的每个JavaScript文件中的foo
:
:vim foo **/*.js | cw
在当前目录的每个文件中搜索当前单词:
:vim <C-r><C-w> * | cw
:vim <cword> * | cw
(编辑:使用:cw[indow]
代替:copen
)
答案 1 :(得分: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]将打开文件,并将光标放在匹配的行上。
答案 2 :(得分:5)
:grep
Vim命令将搜索委托给外部grep
工具(或ack
之类的兼容替代工具,通过'grepprg'
设置)。或者,您可以使用:vimgrep
,在Vim中执行搜索。这允许使用相同的Vim样式的正则表达式和glob模式(如**/
),但它通常较慢,因为每个文件都被读入Vim缓冲区。
两个命令都会在quickfix窗口中显示结果,您可以从中导航到匹配项。
您不需要任何插件,但有几个可用于尝试使处理更简单或支持不同的搜索命令(例如已经提到的 ack.vim )。