fzf是目前最快的fuzzy finder。使用golang编写。结合其他工具(比如ag和fasd)可以完成非常多的工作。
让你通过输入模糊的关键词就可以定位文件或文件夹。当你的思维也习惯了模糊匹配后,在工作中可以大幅提高你的工作效率。
模糊搜索的概念如下,你记得文件名含有con, te, go, 那么你只需要把所有文件送给fzf, 然后在窗口里输入con te go就可以了,不管实现名是test_continus_go还是go_cont_test都会匹配上。
使用git
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf ~/.fzf/install 升级 cd ~/.fzf && git pull && ./install 原生使用fzf默认会从STDIN读入数据,然后将结果输出到STDOUT
find * -type f | fzf > selected上面命令从find的搜索结果中读入,输出到文件selected中
fzf里的快捷键在finder(输出交换窗口)里,
Ctrl-J/Ctrl-K/Ctrl-N/Ctrlk-N可以用来将光标上下移动
Enter键用来选中条目, Ctrl-C/Ctrl-G/Esc用来退出
在多选模式下(-m), TAB和Shift-TAB用来多选
Mouse: 上下滚动, 选中, 双击; Shift-click或shift-scoll用于多选模式
布局fzf默认全屏模式,你可以定制高度
vim $(fzf --height 40%)你可以通过$FZF_DEFAULT_OPTS来设定默认值
export FZF_DEFAULT_OPTS=\'--height 40% --reverse --border\' 搜索语法fzf默认会以“extened-search"模式启动, 这种模式下你可以输入多个以空格分隔的搜索关键词, 如^music .mp3$, sbtrkt !fire.
Token Match type Descriptionsbtrkt fuzzy-match 匹配sbtrkt
^music prefix-exact-match 以music开头
.mp3^ suffix-exact-match 以.mp3结尾
\'wild exact-match(quoted) 精确包含wild
!fire inverse-exact-match 不包含fire
!.mp3$ inverse-suffix-exact-match 不以.mp3结尾
如果你不想用fuzzy match, 可以用fzf -e做精确匹配
符号"|"可以做or匹配, 比如
表示以core开头,以go或rb或py结尾的
环境变量FZF_DEFAULT_ COMMAND
设定默认输入
比如`export FZF_DEFAULT_ COMMAND=\'ag -g ""\'
FZF_DEFAULT_OPTS
设定默认选项
比如`export FZF_DEFAULT_OPTS="--reverse --inline-info"
命令行下的快捷键 CTRL-T在命令行下按下ctrl-t会打开fzf窗口,如果你选中某个条目并按下Enter, 选中的条目会被拷贝到命令行上
如果想同时预览文件内容,可以使用--preview选项
也可以用--select-1和--exit-0
前者是如果只有一个条目,那么自动选中并退出fzf
后者是如果条目为空,自动退出
上面两个选项对ALT-C也有用
在命令行下按下ctrl-r, fzf会列出history命令,选中条目并离开fzf的话, 选中条目会被拷到命令行上
在zsh下可以使用下面的方法来按下C-XC-R来直接执行
在命令行上按下alt-c, 会列出当前文件夹下的目录,选中条目会自动进入到相应目录
默认可以通过**来触发文件或目录的自动完成
COMMAND [DIRECTORY/][FUZZY_PATTERN]**<TBA>比如
vim **<TAB> vim ../mult**<TAB> cd ~/github/fzf**<TBA> 预览窗口如果使用--preview选项, fzf会自动用外部程序打开现在条目的文件, {}会被fzf选中行内容代替
fzf --preview \'cat {}\'建议安装rougify(先安装ruby, 然后gem intall rouge)
然后在.zshrc里用函数或别名
函数是更好的方式, 用alias的话,为了绕开\'的问题,需要用一个双引号加一个间引号再加一个双引号才能生成一个单引号