我在 Linux Uprising 的文章中多次提到 fzf,但我从未真正写过它。 fzf 长期以来一直是我工作流程的一部分,它是一个您应该了解的了不起的工具。
我意识到你们中的许多人已经在使用 fzf,但对于那些没有使用的人,这篇文章是为你准备的。 这只是对 fzf 的简单介绍,没有过多赘述。 fzf 项目页面和 wiki 提供了有关 fzf、其用法以及许多示例的大量信息,因此请查看这些以获取更多信息。
fzf 是一个用 Go 编写的快速交互式命令行模糊查找器。 该工具适用于 Linux、macOS、*BSD 和 Windows。
它可以通过解析命令的输出,使用 Shell 扩展(包括 Bash 和 Zsh 的模糊自动完成,以及诸如 CTRL-T
, CTRL-R
和 ALT-C
用于 Bash、Zsh 和 Fish),以及作为 Vim / Neovim 插件。 还有一个 Tmux 脚本用于在 Tmux 窗格中启动 fzf。
以下是这些 fzf 命令行键绑定的作用:
CTRL-R
: 搜索您的命令历史记录。 按Enter
将历史记录中的选定命令粘贴到命令行上。 按 切换与时间顺序的排序相关性CTRL-R
再次(默认情况下,排序是按相关性完成的)CTRL-T
: 显示当前目录(和子目录)中的文件和文件夹列表。 按Enter
将选定的文件/文件夹路径粘贴到命令行ALT-C
: 显示当前目录中的子目录列表。 按Enter
到cd
进入所选目录
默认情况下,搜索语法允许输入多个以空格分隔的搜索词(fzf 在扩展搜索模式下启动)。 如果要查找完全匹配项,请在搜索词前加上单引号(例如 'search-term
)。 更多关于 fzf 搜索语法的信息在这里。
默认情况下,交互式 fzf 查找器使用以下键绑定: ↑
/ ↓
(或者 CTRL-J
/ CTRL-K
或者 CTRL-N
/ CTRL-P
) 上下移动光标, Enter
键选择一个项目,和 CTRL-C
(或者 CTRL-G
/ ESC
) 退出。 它还支持在使用时选择多个项目 -m
命令行参数,在这种情况下,您可以使用 TAB
和 Shift-TAB
.
fzf 还自带鼠标支持,所以你可以点击、滚动、双击项目等。对于多选模式,你可以使用 Shift-click
和 Shift-scroll
.
其他 fzf 功能包括显示预览窗格(--preview=COMMAND
),设置其高度(例如 --height 50%
), 添加边框 (--border
)、使用自定义键绑定、使用不同的布局(如反向布局)、启用 ANSI 颜色代码的处理等等。
几个简单的例子展示了 fzf 命令行模糊查找器可以做什么
模糊搜索您的 shell 历史记录 (CTRL-R
):
文件和目录的模糊补全 (这是通过以触发序列结束命令来触发的,默认情况下是 **
,然后按 TAB
):
cd **<TAB>
同理,fzf 也可以自动补全主机名(例如 ssh **<TAB>
),以及环境变量和别名(例如 export **<TAB>
)。 它还可以自动完成进程 ID,在这种情况下没有触发序列,例如 kill -9 <TAB>
.
在当前目录(和子目录)中查找文件,并在选择文件时(通过按 Enter
键),文件将通过您的默认命令行编辑器打开:
editor $(find * -type f | fzf)
将其与其他命令结合使用,可创建带有模糊搜索和预览窗格的酷炫交互式控制台 UI。 例如 以下命令 (via) 使用 fzf 和 apt 列出所有可用的软件包,允许您通过按 来安装软件包 Enter
钥匙. 在这里, fzf 与 --preview
显示预览窗格的选项(在这种情况下,它显示选定的 DEB 包详细信息):
apt-cache search '' | sort | cut --delimiter ' ' --fields 1 | fzf --multi --cycle --reverse --preview 'apt-cache show {1}' | xargs -r sudo apt install -y
对于本文顶部的屏幕截图,我正在使用以下命令(它需要 bat,一个 cat
用 Rust 编写的克隆,包括语法高亮等):
fzf --preview 'bat --style=numbers --color=always --line-range :500 {}'
有关更高级的示例,请查看 fzf wiki。
我还在 Linux Uprising 上写过一些使用 fzf 模糊查找器的命令行工具/脚本:
- forgit:由 fzf Fuzzy Finder 提供支持的带有预览的交互式 Git 命令
- ytfzf – 从终端搜索(带缩略图)和播放 YouTube 视频
- z.lua – 一种更快速的目录更改方式(cd 命令在您使用时学习)
安装 fzf 模糊查找器
fzf 可用于 Linux(包括各种 ARM 版本,因此它适用于例如 Raspberry Pi)、macOS、*BSD 和 Windows。
在 Linux 上,可以从 Debian9+、Ubuntu 19.10+、 Fedora、Arch Linux、openSUSE 等。
但是,我个人更喜欢使用它的安装脚本来安装它(它会自动为你的系统下载二进制文件,而不是从源代码构建它)。 那是因为它为您设置了一切,唯一需要的是获取 shell 配置文件。 更新到较新的 fzf 版本也很容易(它们经常发布)。
使用其安装脚本安装 fzf,确保你有 git
安装,然后使用:
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
安装脚本会询问您一些关于启用哪些功能的问题。 你很可能想回答是(y
) 给他们所有人。
就是这样。 现在你所要做的就是重新启动你的 shell 或重新加载配置文件:
- 重击:
source ~/.bashrc
- Zsh:
source ~/.zshrc
- 鱼:
fzf_key_bindings
使用此安装方法,如果您以后要 更新它 (完成和二进制),使用:
cd ~/.fzf
git pull
./install
也更容易 卸载它 (这会撤消对 ~/.bashrc
或者 ~/.zshrc
, 并从中删除 Fish 键绑定 ~/.config
; 它不会删除 ~/.fzf
目录):
cd ~/.fzf
./uninstall