fzf (FuZzy Finder)是一个使用go语言开发的模糊搜索工具,可以在bash、tmux等环境使用,也可以作为一种Vim插件来增强Vim的功能。

fzf本身并不是一个Vim 插件,作者在github上的fzf项目中只提供了基本的wrapper函数(比如fzf#run),直接在Vim中使用fzf只能使用基本的命令,如 :FZF:FZF!。但后来作者发现很多人并不熟悉VIMScript, 所以创建了一个新的github项目fzf.vim,提供了一系列默认的Vim插件配置和按键映射,如 :Files:Colors 等命令。原文如下:

fzf in itself is not a Vim plugin, and the official repository only provides the basic wrapper function for Vim and it’s up to the users to write their own Vim commands with it. However, I’ve learned that many users of fzf are not familiar with Vimscript and are looking for the “default” implementation of the features they can find in the alternative Vim plugins

所以,如果希望在Vim下使用更加强大的fzf,建议你同时安装 fzf 和 fzf.vim 两个项目。

1. fzf安装方法

fzf支持多种安装方式,本文只介绍其作为Vim插件时使用Vundlevim-plug等Vim插件管理器的安装方法。fzf官方推荐使用vim-plug来安装 fzf 和 fzf.vim。

如果使用vim-plug安装,需要在 ~/.vimrc 中增加以下两项配置,并在Vim命令行模式下执行 :PlugInstall

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

当然,上面通过dir指定的路径可以自行指定。

如果使用Vundle安装,需要在 ~/.vimrc 中增加以下两项配置,并在Vim命令行模式执行 :PluginInstall 或在bash命令行执行命令 vim +PluginInstall +qall

1
2
Plugin 'junegunn/fzf',
Plugin 'junegunn/fzf.vim',

:使用Vundle安装fzf后,第一次在Vim中执行 :FZF 命令时可能会提示 ‘fzf executable not found. Download binary? (y/n)’,选y进行下载即可。

关于使用vim-plug和Vundle安装Vim插件的具体方法,在这里不再赘述,具体可参考Vim教程网上的文章Vim插件管理vim-plug以及Vim插件管理器Vundle

2. fzf配置

fzf 提供了环境变量 配置参数 FZF_DEFAULT_COMMAND 用来设置默认的调用命令,以及 FZF_DEFAULT_OPTS 参数用来设置 fzf 的界面展示样式。

如果是使用 fzf 来查找文件,其底层实际是调用的Linux操作系统 find 命令,可通过设置 FZF_DEFAULT_COMMAND 变量来修改使用的程序,例如,可以使用 fd 来替换 find 作为fzf查找文件时调用的程序,export FZF_DEFAULT_COMMAND="fd --type f"

fzf的展示窗口样式可通过 FZF_DEFAULT_OPTS 变量进行设置,例如,export FZF_DEFAULT_OPTS="--height 40% --layout=reverse --preview 'cat {} 2> /dev/null | head -500'" 用于指定在屏幕右侧调用cat命令显示文件的前500行内容作为预览界面,关于界面展示的更多参数介绍,使用通过 fzf --help 进行获取。

3. Vim fzf使用方法

系统中安装完 fzf 后便可以在Vim命令行模式使用 :FZF 来列出当前目录下所有的文件,可以通过 Ctrl-kCtrl-j 来上下移动选择目标文件。

类似于 ctrlp,可以使用 Ctrl-T 在当前窗口打开选中的文件, 使用 Ctrl-X 在一个新的tab标签页打开选中的文件,或使用 Ctrl-V 在垂直分屏窗口打开选中的文件。

而如果系统中还安装了 fzf.vim 插件,则可以使用针对Vim进行过特定配置的升级版 fzf 命令 (这些命令大都是 fzf 调用某个工具,如git、ctags等产生对应文件),如:查找当前 Buffer、Tag、标记,切换Vim窗口,更换vim 主题配色等。

fzf.vim 支持的命令及对应命令功能列表如下:

命令 列出
:Files [path] 列出path路径下的所有文件 (功能等价于 :FZF 命令)
:Buffers 文件缓冲区切换
:Colors 选择Vim配色方案
:Tags [QUERY] 当前项目中的Tag (等价于:ctags -R)
:BTags [QUERY] 当前活动缓冲区的标记
:Marks 所有Vin标记
:Windows 窗口
:Lines [QUERY] 在所有加载的文件缓冲区里包含目标词的所有行
BLines [QUERY] 在当前文件缓冲区里包含目标词的行
Locate PATTERN locate command output
History v:oldfiles and open buffers
History: 命令行命令历史
History/ 搜索历史
Commands Vim命令列表
Maps 普通模式下的按键映射
Snippets Snippets ([UltiSnips][us])
Commits Git commits (requires [fugitive.vim][f])
BCommits Git commits for the current buffer
GFiles [OPTS] Git files (git ls-files)
GFiles? Git files (git status)
Ag [PATTERN] [ag][ag] search result (ALT-A to select all, ALT-D to deselect all)
Rg [PATTERN] [rg][rg] search result (ALT-A to select all, ALT-D to deselect all)
Filetypes File types

例如,:Files 命令与 :FZF 命令具有相同的作用:列出指定路径下的所有文件,选中后vim会打开选中的文件。
fzf-Files

:Buffers 命令用于在存在于buffer中的文件间切换,功能等价于 :bnext 等命令,更多内容可参考Vim文件缓冲区列表介绍
fzf-Buffers

Lines <keyword> 命令用于在所有加载的文件缓冲区中查找含有某个关键词的行,而 :BLines 命令只在当前缓冲区里查找。
fzf-Lines

:Colors 用来修改当前Vim窗口使用的配色方案。
fzf-Colors

嗯,扫一扫就可以找到小女子我啦~