前言fzf是目前最快的模糊查找器。用golang写的。结合ripgrep和fd等其他工具,可以做很多事情。让您通过输入模糊的关键字来定位文件或文件夹。当你的思维也习惯于模糊匹配时,你在工作中的工作效率就能大大提高。模糊搜索的概念如下,你记得文件名包含con,te,go,那么你只需要将所有文件发送到fzf,然后在窗口中输入contego即可,不管实现名是test_continus_go或go_cont_test将匹配。使用gitgitclone--depth1安装https://github.com/junegunn/fzf.git~/.fzf~/.fzf/install升级cd~/.fzf&&gitpull&&./install本机使用fzfdefaultsfromSTDIN读入数据,然后将结果输出到STDOUTfind*-typef|fzf>selected以上命令从find的搜索结果中读入,输出到selected文件中。fzf中的快捷键在finder(输出交换窗口)中,Ctrl-J/Ctrl-K/Ctrl-N/Ctrl-N可以用来上下移动光标回车键用来选择项目,Ctrl-C/Ctrl-G/Esc用于多选模式退出(-m),TAB和Shift-TAB用于多选鼠标:上下滚动,选择,双击;shift-click或shift-scoll用于多选模式布局fzf默认全屏模式,可以自定义高度vim$(fzf--height40%)可以使用$FZF_DEFAULT_OPTS设置默认值exportFZF_DEFAULT_OPTS='--height40%--reverse--border'搜索语法fzf将默认以“扩展搜索”模式启动,在此模式下您可以输入多个空格分隔的搜索关键字,例如^music.mp3$,sbtrkt!fire.TokenMatchtypeDescriptionsbtrktfuzzy-matchmatchessbtrkt^musicprefix-exact-matchstartswithmusic.mp3$suffix-exact-matchendswith.mp3'wilddexact-match(quoted)完全包含wild!fireinverse-exact-match不包含fire!.mp3$inverse-suffix-exact-matchdoesnotendwith.mp3如果你不想使用模糊匹配,你可以使用fzf-e来做精确匹配|可以做或匹配,比如^corego$|rb$|py$表示环境变量FZF_DEFAULT_COMMAND以core开头,以go或rb或py结尾,设置默认输入,如`exportFZF_DEFAULT_COMMAND='fd--typef'FZF_DEFAULT_OPTS设置默认选项如`exportFZF_DEFAULT_OPTS="--reverse--inline-info"命令行快捷键CTRL-T命令行按ctrl-tfzf窗口将打开。如果您选择一个项目并按Enter,则所选项目将被复制到命令行。如果想同时预览文件内容,可以使用--preview选项exportFZF_CTRL_T_OPTS="--preview'(highlight-oansi-l{}2>/dev/null||cat{}||tree-C{})2>/dev/null|head-200'"也可以用--select-1和--exit-0前者是如果只有一个entry就自动选择退出fzf后者就是如果entry为空则自动退出exithistorycommand,选中entry离开fzf,选中的entry会被复制到命令行。在zsh下可以使用如下方法按C-XC-R直接执行fzf-history-widget-accept(){fzf-history-widgetzleaccept-line}zle-Nfzf-history-widget-acceptbindkey'^X^R'fzf-history-widget-acceptALT-C在命令行按下alt-c,当前文件夹会列在目录下,选中的条目会自动进入对应目录。命令行下的模糊补全可以通过**COMMAND[DIRECTORY/][FUZZY_PATTERN]**触发文件或目录的自动补全如vim**vim../mult**cd~/github/fzf**Previewwindow如果使用了--preview选项,fzf会自动用外部程序打开当前入口的文件,{}将被fzf选中的内容替换为fzf--preview'cat{}',建议安装bat,它是用Rust编写的独立程序也可以安装rougify(先安装ruby,再安装gemintallrouge)Bat:https://github.com/sharkdp/batHighlight:http://www.andre-simon.de/dok...CodeRay:http://coderay.rubychan.de/Rouge:https://github.com/jneen/rouge然后在.zshrc{fzf--preview'[[$(file--mime{})中使用函数或别名fzfp()=~binary]]&&echo{}是一个二进制文件||(bat--style=numbers--color=always{}||rougify{}||highlight-Oansi-l{}||coderay{}||cat{})2>/dev/null|head-500'}aliastt='fzf--preview'"'"'[[$(file--mime{})=~binary]]&&echo{}是一个二进制文件||(bat--style=numbers--color=always{}||rougify{}||highlight-Oansi-l{}||coderay{}||cat{})2>/dev/null|head-500'"'"函数是更好的方法。如果使用alias,为了绕过'的问题,需要使用双引号,空格引号,双引号生成上图左边的单引号。是一个文件列表,右边是rougify生成的预览窗口,可以用鼠标上下滚动。不幸的是,不能将光标移动到右侧窗口以使用键盘上下滚动。fzf示例interactivecd安装wgethttps://github.com/changyuheng/zsh-interactive-cd/blob/master/zsh-interactive-cd.plugin.zshcpzsh-interactive-cd.plugin.zsh~/.fzf/shellecho'source~/.fzf/shell/zsh-interactive-cd.plugin.zsh'>>~/.zshrcd后按ctrl-i就会打开fzffinder窗口z#fasd&fzfchangedirectory-jumpusing`fasd`if给定参数,使用`fzf`elsez(){[$#-gt0]&&fasd_cd-d"$*"&&returnlocaldirdir="$(fasd-Rdl"$1"|fzf-1-0--no-sort+m)"&&cd"${dir}"||return1}changingdirectory#fd-cdtoselecteddirectoryfd(){localdirdir=$(find${1:-.}-path'*/\.*'-prune\-o-typed-print2>复制代码/dev/null|fzf+m)&&cd"$dir"}#fda-包括隐藏目录fda(){localdirdir=$(find${1:-.}-typed2>/dev/null|fzf+m)&&cd"$dir"}#fdr-cd到选定的父目录ctoryfdr(){localdeclaredirs=()get_parent_dirs(){if[[-d"${1}"]];然后dirs+=("$1");否则返回;如果[["${1}"=='/']];然后在“${dirs[@]}”中查找_dir;做echo$_dir;doneelseget_parent_dirs$(dirname"$1")fi}localDIR=$(get_parent_dirs$(realpath"${1:-$PWD}")|fzf-tmux--tac)cd"$DIR"}#cf-模糊cdfromanywhere#ex:cfword1word2...(即使是文件名的一部分)#zshautoloadfunctioncf(){localfilefile="$(locate-Ai-0$@|grep-z-vE'~$'|fzf--read0-0-1)"if[[-n$file]]thenif[[-d$file]]thencd--$fileelsecd--${file:h}fifi}v#fasd&fzf更改目录-如果给定参数,则使用`fasd`打开最佳匹配文件,使用`fzf`elsev(){[$#-gt0]&&fasd-f-e${EDITOR过滤`fasd`的输出}"$*"&&返回本地文件file="$(fasd-Rfl"$1"|fzf-1-0--no-sort+m)"&&vi"${file}"||return1}Fzf的vim插件安装在.vimrc中,带有vunblesetrtp+=/home/harriszh/.fzf/...plugin'junegunn/fzf.vim'...然后可以使用FZF等命令,建议安装ripgrep,将FZF_DEFAULT_COMMAND改为ripgrep,如果对vim感兴趣和组合,可以看:VIM与模糊搜索神器FZF的综合用法——从简单到高级如果想把FZF和各种工具一起使用,请看:模糊搜索神器FZF附篇fzf是一个非常强大的胶水工具,配合ag,fasd和shell命令使用可以实现非常华丽的功能,更多例子见wiki,如有错误请联系作者