Vim配置使用FZF
使用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_searcher和Rg
: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,我感觉还挺好用的:-)