在Vim中查找文件(通过递归目录搜索)

mat*_*lin 75 vim

有没有办法在Vim中以递归方式搜索文件(在需要时使用通配符)?如果不是本地的,是否有一个插件可以处理这个?

Dav*_*low 94

您可以在:edit命令中使用通配符.所以,

:e **/test/Suite.java
Run Code Online (Sandbox Code Playgroud)

将打开test/Suite.java,无论它在当前目录层次结构中的何处.这适用于制表符完成,因此您可以在打开文件之前使用[tab]展开通配符.另请参阅wildmode选项以获取浏览所有可能扩展名的方法.

另一个技巧是使用

:r! find . -type f
Run Code Online (Sandbox Code Playgroud)

将当前目录中的所有文件列表加载到缓冲区中.然后,您可以使用所有常用的vim文本操作工具来导航/排序/修剪列表,并CTRL+W gf在新窗格中打开光标下的文件.

  • 对具有复杂目录结构的大型文件集合要非常小心.此命令可以将您的vim挂起很长时间.我的代码库已经搜索了20分钟.使问题复杂化的是,没有办法阻止它.我尝试了常用的Ctrl + C和Ctrl + Break.Procmon显示vim仍在搜索我的文件.所以解决方案并不适合所有人:( (5认同)
  • 这有点让我的一周,谢谢. (2认同)
  • 天哪,这太棒了! (2认同)

Ste*_*ger 44

有一个find命令.如果添加**到路径中,则可以递归搜索.

:set path
Run Code Online (Sandbox Code Playgroud)

将显示您当前的路径,通过执行类似的操作添加**

:set path=.,/usr/include,,**
Run Code Online (Sandbox Code Playgroud)

**我从最初复制之前的位:set path

然后你可以输入

:find myfile.txt
Run Code Online (Sandbox Code Playgroud)

它神奇地打开了!

如果将set命令添加到.vimrc,它将确保您将来可以进行递归搜索.它似乎不搜索点目录(例如.ssh)

  • 您还可以通过`:set path + =**`附加到您的路径 (9认同)

Vic*_*der 20

我推荐ctrlp.vim.这是一个非常好的插件,非常适合在大型项目中工作.它具有按文件名或完整路径搜索,正则表达式搜索,项目根的自动检测(具有.git | hg | svn | bzr | _darcs文件夹的文件夹),个性化文件名排除等等.

只需按<c-p>,它将打开一个非常直观的窗格,您可以在其中搜索您想要的内容:

在此输入图像描述

可以一次选择并打开多个文件.它还接受其他任意命令,例如跳转到某一行,字符串出现或任何其他Vim命令.

回复:https://github.com/kien/ctrlp.vim

  • kien/ctrlp.vim似乎没有维护.似乎有共识使用ctrlpvim/ctrlp.vim fork,它似乎是主动维护的:https://github.com/ctrlpvim/ctrlp.vim (5认同)
  • fzf与ctrlp非常相似.它更快,更好地分类结果.它也适用于Vim之外,但内置了Vim支持:https://github.com/junegunn/fzf (4认同)

mb1*_*b14 6

vim作为内置查找命令(:help find)但只打开第一个找到的文件.但是你可以使用这个神奇的插件:FuzzyFinder,可以完成你想要的一切,甚至更多