闻心阁

一蓑烟雨看苍生,半壶浊酒笑红尘

Vim配置使用FZF

2019-01-19 约 1 分钟读完 搬砖秘籍

使用Vim已经有了一段时间,虽然是和VS Code配合使用,不过还是有很多痛点。最近好不容易有了点时间,做了一个简单的折腾。今天的主题是使用FZF,这是目前来折腾的比较强大的一个插件了。

FZF是用来做什么的?

fzf是一个用来做模糊搜索的强大工具,其实它不是专用于Vim的,但有人专门开发了一个插件fzf.vim,用于结合Vim与FZF,因此与搜索相关的内容都可以交给FZF了。

安装

有2种安装方法,一种是先在系统安装FZF再在Vim中安装fzf.vim插件。配置如下:

Plug '/usr/local/opt/fzf' 
Plug 'junegunn/fzf.vim'

上面 /usr/local/opt/fzf 是使用Homebrew安装的就是这个目录,其他系统请配置成特定的目录。另外一种方式是本机不安装fzf,直接在Vim中安装。方法如下:

Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'

PS:根据本人折腾下来的经验来看,使用Mac请选择第一种。直接使用Homebrew安装

brew install fzf

其他系统请自己斟酌。安装完成之后,让我们看看fzf.vim都支持哪些搜索。

默认支持的功能

:Files [PATH] //Files (similar to :FZF)

:GFiles [OPTS] //Git files (git ls-files)

:GFiles? //Git files (git status)

:Buffers //Open buffers

:Colors //Color schemes

:Ag [PATTERN] //ag search result (ALT-A to select all, ALT-D to deselect all)

:Rg [PATTERN] //rg search result (ALT-A to select all, ALT-D to deselect all)

:Lines [QUERY] //Lines in loaded buffers

:BLines [QUERY] //Lines in the current buffer

:Tags [QUERY] //Tags in the project (ctags -R)

:BTags [QUERY] //Tags in the current buffer

:Marks //Marks

:Windows //Windows

:Locate //PATTERN locate command output

:History //v:oldfiles and open buffers

:History: //Command history

:History/ //Search history

:Snippets //Snippets (UltiSnips)

:Commits //Git commits (requires fugitive.vim)

:BCommits //Git commits for the current buffer

:Commands //Commands

:Maps //Normal mode mappings

:Helptags //Help tags 1

:Filetypes //File types

替换CtrlP

ctrlp.vim是模仿Sublime中的一个功能,可以方便的搜索当前项目中的所有文件,可以看出在fzf.vim中可以通过:Files命令来查找项目的所有文件。这样只要通过映射一个命令即可实现ctrlp功能了,也可以通过:Buffers查找所有已经打开的文件。如下:

map <leader>p :Files<CR>
map <leader>b :Buffers<CR>

效果:

实现替换Ack.vim

ack.vim是Vim中实现查找工程中特定字符的工具,fzf.vim中已经集成了:Ag:Rg来实现工程全局搜索,当然前提是你系统中已经安装了Ag:the_silver_searcherRg:ripgrep这两种工具。我选用了Rg,据说效率比Ack之类的都要高。先安装ripgrep,Mac下直接使用Homebrew安装

brew install ripgrep

其它系统请自行按照官网推荐的方法安装。安装完成之后,要覆盖一下fzf默认搜索引擎,使用 ripgrep 的一个好处是能根据你的.gitignore文件,自动排除一些不需要被检索的文件,比如node_modules文件夹,完成这个需要在.zshrc或者在.bashrc中配置一下,这也是推荐使用系统安装fzf的原因。

export FZF_DEFAULT_COMMAND="rg --files --hidden -g'!.git'" //set in .zshrc

这是我配置的,加了几个参数,解释一下加这几个参数的原因,使用默认情况下会把以点.开头文件屏蔽掉,但如果要搜索.env这种文件会检索不到,所以加了一个--hidden参数,不过这样的话会把.git目录放出来,所以最后就是上面配置的命令了,大家也可以根据自己的需要配置一下。最后再加一句配置,不用每次都输入命令。

map <leader>f :Rg<CR>

效果:

后话

如果有其他好用的配置方法请一定留言给我,有问题也可以留言。我的Vim配置:sailor103/neovim-mac,欢迎fork,我感觉还挺好用的:-)