使用模糊搜索在 Vim 中打开文件

问题描述 投票:0回答:5

我正在寻找一种方法,使 Vim 能够通过模糊搜索文件名来打开文件。

基本上,我希望能够定义一个项目一次,然后有一个快捷方式,它可以让我有一个地方输入文件名,并且如果有任何字母匹配,就会匹配。

这种功能存在于我见过的大多数编辑器中,但我一辈子都不明白如何让 Vim 做到这一点。

请注意,我正在寻找的东西不会要求我知道文件在我的目录树中的位置。我只是希望能够通过文件名打开它,无论它位于哪个目录中。

谢谢

vim editor text-editor fuzzy-search
5个回答
73
投票

有两个很棒的 vim 插件可以实现此目的。

ctrlp

  • 用纯 VimL 编写
  • 几乎在任何地方都适用
  • 支持自定义查找器以提高性能
  • Vim 最受欢迎的模糊搜索插件

Command-T

  • 用 C、VimL 和 Ruby 编写
  • 快速开箱
  • 需要 Vim
    +ruby
    支持
  • 推荐 Vim 版本 >=
    7.3

编辑:

我使用 CtrlPag 作为我的自定义查找器,它的速度非常快(即使在大型项目中)并且非常便携。

agCtrlP 一起使用的示例:

if executable('ag')
  " Use Ag over Grep
  set grepprg=ag\ --nogroup\ --nocolor

  " Use ag in CtrlP for listing files. Lightning fast and respects .gitignore
  let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
endif

4
投票

Vim 的 CommandT 与 TextMate 中的功能非常相似。我现在的工作流程是

1)打开MacVim

2) :cd ~/my_project

3)(我按照安装帮助中的描述进行了映射)

4) C-v 文件以垂直拆分方式打开文件,或 CR 以打开新的水平拆分方式。

5) 要关闭分割,请使用 :bd (缓冲区删除)

6) 要切换到另一个缓冲区,我安装了 BufferExplorer,所以只需 e 并选择

这个工作流程与TextMate相当,需要一段时间来适应,我还在学习中。


3
投票

基本解决方案

只需将其添加到您的 .vimrc 中

nnoremap <C-p> :find ./**/*

按 Ctrl+p 现在可以模糊查找当前工作目录及其子目录中的文件。使用 Tab 键循环选择选项。

相关解决方案

对于那些想要保持基本(即没有插件)的人,这个有趣的视频展示了在vim中实现模糊文件查找的另一种方法。

他们实际上使用

set path+=**
set wildmenu

在其 .vimrc 中查找当前子目录中的文件。

例如,使用

:find *Murph
后跟选项卡,我会在子目录 code 中找到文件 KilianMurphy2012Why.RKilianMurphy2014ROLE.R,我可以使用 Tab 键循环浏览这些文件。上面第一个解决方案的优点是还显示了相对路径。

请注意,您当前的工作目录很重要,并且您的路径 (

:set path?
) 上的其他文件也可以通过此类解决方案找到。
wildmenu
选项可添加视觉信息,但不是必需的。

对于键盘快捷键,添加

nnoremap <C-p> :find *

到你的.vimrc。现在,您将能够在正常模式下使用 Ctrl+p 快速搜索项目/当前目录中的文件。



0
投票

fzf是一个强大的模糊文件查找工具,并且有vim集成。查看官方安装说明或继续阅读简短的安装指南:

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  • 将以下内容添加到您的 vimrc
call plug#begin()
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
call plug#end()
  • 安装插件(像这样,或者在vim中输入
    :PlugInstall
$ vim +:PlugInstall

现在您可以在 vim 中运行

:Files
进行模糊文件搜索。

您可以将自己的快捷键添加到您的

vimrc
,例如以下的control+p

nnoremap <C-p> :Files<cr>
© www.soinside.com 2019 - 2024. All rights reserved.