如何在VIM中搜索项目中的所有文件?

83

有几件事情我还不明白VIM的方式。

其中之一是在项目中进行搜索(在Atom中使用VIM):

输入图像描述

我目前使用CtrlP来查找文件名,但是对于内容呢?

如何使用字符串进行搜索,然后使用VIM和/或VIM插件查看所有出现项的列表?


4
安装 ack 或者 ag,并使用 CtrlSF 插件。你不会后悔的。 - Sato Katsura
3
这个vim发行版/配置/版本/插件是什么?看起来很棒。 - Anton Daneyko
@AntonDaneyko 那是带有 vim 插件的 Atom - 0xMH
1
只使用望远镜。 - Dmitrii Kharlamov
5个回答

104
我找到了一个更好的解决方案: FZF
它使用:Ag命令异步地搜索您项目中的所有内容。 enter image description here

12
请注意:这需要安装 silver_searcher https://github.com/ggreer/the_silver_searcher 作为前提条件。 - Miguel Mota
对于VIM自带的不那么美观的解决方案,请参考以下链接:https://dev59.com/D2ct5IYBdhLWcg3wmOdO - Nathan majicvr.com
@Sem 我安装了 silver_searcher、fzf 和 vim-plug 包。你能告诉我如何使用它们吗? - jian
在你的vim配置文件中添加这一行nnoremap <C-s> :Ag<CR>,这意味着每当你按下ctrl + s时调用Ag。 - ezio

40

使用:grep:vimgrep搜索文件内容。结果会放在“位置列表”中,您可以通过键入:cwEnter打开它。

:grep的语法默认与grep(1)命令相同:

:grep 'my pattern.*' /path/to/dir

默认情况下,它将搜索当前目录 (:pwd)。我在我的.vimrc中添加了set autochdir,所以我的PWD始终跟随我正在编辑的文件。

:grep:vimgrep之间的主要区别在于,:vimgrep(简称:vim)使用与Vim兼容的正则表达式,而:grep使用您的&grepprg使用的任何正则表达式。

您可以通过将&grepprg设置为其他内容来使用自定义程序。我个人喜欢ack,它使用Perl兼容的正则表达式。


是的,那么出现次数列表呢? - Sem
@Sem 我已经扩展了我的答案,尽可能详细地解释,而不会深入探讨。 - amphetamachine
":cw" 正是我所需要的!您先生,是最棒的。 - Sem
嗨。我发现这个超级有用。我可以上下导航列表。有没有办法通过在“位置列表”中的带下划线的文件上单击“Enter”直接打开文件?我用NerdTree也是类似的操作。或者也许有一种“vimer”的方法来做到这一点,呵呵(还在学习中)。 - vabada
这是最慢的方法。 - calbertts

5
除了 fzf 之外,还有其他出色的模糊查找插件。
  • telescope.nvim(仅支持 neovim):安装后,只需使用 Telescope live_grep 搜索您的项目。
  • Leaderf:另一个具有良好性能的模糊查找器。安装后,使用 Leaderf rg 搜索您的项目。

1
为了打开一个文件,我会在位置列表中高亮选中行(Shift-v),然后按Enter键。

1
如果您正在使用 Neovim,更好的解决方案是使用 telescope.nvimBurntSushi/ripgrep 建议依赖项,您可以使用 live_grepgrep_stringfind_files

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接