Fuzzy finder 是一款使用 GO 语言编写的交互式的 Unix 命令行工具。能够用来查找任何 列表 内容,文件、Git 分支、进程等。全部的命令行工具能够生成列表输出的均可以再经过管道 pipe 到 fzf 上进行搜索和查找php
以 macOS 为例子,直接使用 homebrew 安装便可node
brew install fzf # 若是要使用内置的快捷键绑定和命令行自动完成功能的话能够按需安装 $(brew --prefix)/opt/fzf/install
命令行下执行 fzf
便可展现当前目录下全部文件列表,能够用键盘上下键或者鼠标点出来选择git
或许你会以为这个查找提示看起来挺漂亮的,可是并无什么卵用,由于查找出来就没有而后了。其实这也是 Fuzzy finder 最核心的地方,他只是一个通用的下拉查找功能,本身自己并不关心你用它来作什么,一般咱们须要组合使用才会有很好的效果github
好比咱们用 vim 组合 fzf 来查找并打开目录下的文件:shell
vim $(fzf)
再好比进入到某个文件夹下面,使用 fzf 的过滤选择真是太方便了vim
cd $(find * -type d | fzf)
这是个组合 (cd+find+fzf) 命令,完成切换到任意子目录的功能。能够看出来当 fzf 和其它命令组合使用时就能使得一些操做更方便:sass
git checkout $(git branch -r | fzf)
不过这样组合使用命令的实在太长了,若是你不使用自动补全的话巧起来很累的。建议把经常使用的 alias 放在 .zshrc 中管理嘛bash
fzf 默认使用 **
来补全 shell 命令,比起默认的 tab 补全,fzf 补全不知道高到哪里去了。cd, vim, kill, ssh, export... 通通都能补全,好用哭了 🤣ssh
fzf 提供了两个 环境变量 配置参数,来分别设置默认的调用命令和 fzf 默认配置参数ide
对于使用 fzf 来查找文件的状况,fzf 其实底层是调用的 Unix 系统 find
命令,若是你以为 find 很差用也可使用其它查找文件的命令行工具「我使用 fd」。注意:对原始命令添加一些参数应该在这个环境变量里面添加
好比说咱们通常都会查找文件 -type f
,一般会忽略一些文件夹/目录 --exclude=...
,下面是个人变量值:
export FZF_DEFAULT_COMMAND="fd --exclude={.git,.idea,.vscode,.sass-cache,node_modules,build} --type f"
界面展现这些参数在 fzf --help
中都有,按需配置便可
export FZF_DEFAULT_OPTS="--height 40% --layout=reverse --preview '(highlight -O ansi {} || cat {}) 2> /dev/null | head -500'"
--preview
表示在右侧显示文件的预览界面,语法高亮的设置使用了 highlight 若是 highlight 失败则使用最多见的 cat
命令来查看文件内容
highlight 安装可能会有个小插曲。highlight 须要手动编译安装,默认安装目录在 /usr/bin
, /usr/share
下面。然而在 macOS 中因为 <abbr title="System Integrity Protection">SIP</abbr> 保护,用户安装的程序不能在这几个目录下面「即便有 sudo 权限也不行」。咱们能够手动更改下 highlight 源代码中 makefile 中的参数便可
# PREFIX = /usr PREFIX = /usr/local
将 PREFIX = /usr
改为 PREFIX = /usr/local
,而后 make
,sudo make install
就能够了
默认是 **
,通常不用修改
若是你使用 vim,那么官方提供的插件会让你的 vim 使用更加流畅
若是你本地安装过 fzf 命令行工具了,只须要在 .vimrc 里面添加下面两个插件配置便可
Plug '/usr/local/opt/fzf' Plug 'junegunn/fzf.vim'
注意:使用了 vim-plug 插件管理
插件主要对 fzf 集成绑定了一些和 vim 相关的功能,好比:查找当前 Buffer、Tag、Marks。甚至切换 window 更换 vim 主题配色等
命令模式下敲 Files
便可选择当前目录下全部文件,Buffers
能够过滤当前全部 vim buffer 内容
再配置几个经常使用快捷键就能够直接取代 CtrlP 插件了 🤔
nmap <C-p> :Files<CR> nmap <C-e> :Buffers<CR> let g:fzf_action = { 'ctrl-e': 'edit' }
固然 fzf 还能够在不少其它场景下用来。若是你想使用可视化的列表选择而不是咣咣敲命令,那就本身搭配一些组合来使用吧
博客原文同步:https://keelii.com/2018/08/12/fuzzy-finder-full-guide/