之前在查找命令行历史的时候,我的方法非常原始,先打几个字,然后用 zsh 自带的向上翻页找对应的命令。再进阶一点的就是用 history | grep xxx 来查找对应命令,或者是按 ctrl+r 来搜索历史,但是我觉得 ctrl+r 真是逆天地难用,键位还十分让人捉急。

今天在 hackernews 上看到 mcfly(https://github.com/cantino/mcfly ),用了小型神经网络来智能提示历史命令,但是我在使用时一直不 work,后来看到有评论说 fzf ( https://github.com/junegunn/fzf )不错,于是试了一下,果然很好用。

安装

首先是安装,在 mac 上安装很简单:

brew install fzf

我们需要用到命令行快捷键,可以用下面的命令注册快捷键:

(brew --prefix)/opt/fzf/install

我在我的 ubuntu 主机上安装是用下面的命令:

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

使用

搜索文件

使用 alt+c 或者 esc+c 可以直接唤出 fzf,相当于直接敲命令:

fzf

你会看到一个全屏的列表,你可以用模糊搜索来搜文件名,或者是传入一个文件列表,手动选择文件名:

ls *.cpp | fzf

这样的交互就很友好了,加上 -m 配合 tab 键可多项选择。你还可以用 preview 功能,查看文件内容(这一点和 ranger 很像):

fzf --preview 'cat {}'

搜索命令

如果是想搜索命令历史的话,通过 ctrl+r 来触发,进入命令模式,随意打命令就可以用模糊搜索匹配到历史命令。

补全命令

fzf 的补全触发是用 ** 符号,比如这样:

vim ~/code/**<tab>

然后你就可以通过 fzf 来选择 ~/code/ 下面的文件,并把结果补到你的命令中。