- B站:https://www.bilibili.com/video/BV1Bru46aEX7
- 抖音:https://v.douyin.com/FHaA5KQ65T8/
- 小红书:http://xhslink.cn/o/7iHa6h7vkke
文章目录

1. fzf 简介
fzf 是韩国开发者 Junegunn Choi 用 Go 语言编写的命令行模糊查找器(fuzzy finder),自 2013 年创建以来已持续维护十余年,GitHub 上积累了约 8 万颗星标,被公认为终端用户最不可或缺的命令行工具之一。它采用 MIT 开源许可证,以单个静态编译的二进制文件分发,无任何运行时依赖。作者 Junegunn Choi 同时也是极简 Vim 插件管理器 vim-plug 的作者,其开发的 fzf.vim 插件同样广受欢迎。
fzf 要解决的,是 Linux 终端里一个很常见、又很头疼的问题:面前有一长串东西要挑选时,怎么快速挑出想要的那一个。
举个例子:你想打开一个文件,但只记得名字里有 report;你想从几百条历史命令里找回上周敲过的那个部署命令;你想在几十个 docker 容器里找到名字含 db 的那个。过去只能一行行翻、靠眼睛找。而 fzf 做的事情很简单——它把这份列表展示成一个可以即时搜索的界面,你输入几个记得的关键字(哪怕记不全、顺序不对),它立刻把匹配项筛出来,回车即选中。
fzf 本身不关心列表里装的是什么。你把什么数据喂给它(文件、命令历史、进程、git 提交、服务器地址……),它就在这份数据里帮你筛选。所以它被称为"终端里的搜索引擎":列表内容由你决定,筛选体验由 fzf 负责。也正因为它只管"筛选加选择"这一件事,可以和任何命令组合使用,成为日常终端操作里最常用的那块积木。
fzf 的核心特点:
- 便携(Portable)
- 快速(Fast)
- 可编程(Programmable)
- 开箱即用(Batteries-included):内置 Bash、Zsh、Fish、Nushell、Vim 与 Neovim 集成脚本
2. v0.74.2 版本亮点
该版本汇集了 5 位贡献者 的 25 条 贡献。
v0.74.2 是 fzf 在 2026 年 8 月初发布的一个版本,重点优化了短查询性能,并修复了一批跨 shell、跨平台的细节问题:
2.1 性能优化
- 短查询大幅提速:短查询会扫描最大的候选集,首次按键需要扫描整个输入。单字符查询提速最高 2.4 倍,双字符查询提速最高 1.4 倍
- 更快的排序:搜索结果排序更快,跳过冗余的基数(radix)遍历
2.2 功能改进
change-border-label 和 transform-border-label 现在可作用于 tmux 或 Zellij 浮动窗格的原生边框- fzf 现在可以在 Windows 的
--height 模式下检测终端窗口大小变化
2.3 Bug 修复
- 修复预览命令发出的 Kitty 图形序列被 tmux 误当作窗格标题请求的问题
- 修复
--preview-window ~N 导致预览顶部图片撕裂的问题 - 修复 fzf 作为库使用时,
Run() 返回后信号和窗口大小调整处理器仍残留的问题 - fish:修复历史命令受用户初始化脚本影响的问题,并改进 CTRL-R 中时间戳的颜色
- zsh:修复 perl 可用时 CTRL-R 不传递 fzf 退出状态的问题
- zsh:修复 ALT-C 导致
chpwd 钩子函数被调用两次的问题
3. 获取安装包
如果访问 GitHub 不便,安装包及中文文档:https://hanshuixin.org/go/2259(内含 fzf-0.74.2-linux_amd64.tar.gz、README 中英对照、发布说明中英对照和 LICENSE)。
适用于 Linux x86_64(amd64)。
fzf 其他版本:https://hanshuixin.org/resource/software_integrated_package/Linux/fzf
Linux安装fzf-v0.74.2(fzf-0.74.2-linux_amd64).zip├── fzf-0.74.2-linux_amd64.tar.gz ← 解压后部署使用├── Linux安装fzf-v0.74.2(fzf-0.74.2-linux_amd64).pdf├── README/│ ├── README.md│ └── README-中文版.md├── 发布说明/│ ├── RELEASE-NOTES.md│ └── RELEASE-NOTES-中文版.md└── LICENSE
4. 安装
fzf-0.74.2-linux_amd64.tar.gz 是 fzf 官方发布的 Linux amd64/x86_64 二进制发行包,内含 Go 静态编译的单文件可执行程序,无运行时依赖,不绑定特定发行版,适用于绝大多数 Linux 环境。
# 解压发行包tar -xzf fzf-0.74.2-linux_amd64.tar.gz# 将可执行文件部署到系统路径(推荐 /usr/local/bin)sudo mv fzf /usr/local/bin/# 验证安装fzf --version
4.1 shell 集成配置
fzf 的核心价值在于与 shell 的深度集成。在 shell 配置文件中添加对应的一行,即可启用命令行快捷键(CTRL-T、CTRL-R、ALT-C)和模糊补全:
bash(~/.bashrc)
eval ”$(fzf --bash)”source ~/.bashrc
重连一次终端后生效
--bash、--zsh、--fish 选项仅在新版本 fzf 中可用;旧版本可在 /shell 目录中逐个 source 对应脚本文件。
5. 使用
5.1 经典使用场景
fzf 的用法本质上就一句话:把一份列表交给它,输入关键字筛选,回车选择。下面是最常见的几个场景。这些场景基于全新安装的 Debian 12,所需命令全部系统自带(fzf 本身除外),无需额外安装 git、docker、fd、bat 等工具。
场景一:打开一个只记得一半名字的文件
首先创建一个演示目录并放入几个示例文件:
mkdir -p ~/demo && cd ~/demotouch monthly-report.md quarterly-report.md notes.txt config.yaml
# 输入 cat 后加两个星号再按 TAB,直接进入模糊补全cat **
界面出现后,输入 report,列表立即只剩文件名里带 report 的文件,上下键选中,回车即显示内容。整个过程不用记完整路径。
想用编辑器打开时,把 cat 换成 vi 即可(Debian 12 自带 vim-tiny 提供的 vi,nano 需另行安装)。
场景二:找回以前敲过的命令
# 先执行几条命令,让历史记录里有一些内容ls -lacat /etc/os-releasedf -h
# 然后按 CTRL-R,输入关键字,历史命令瞬间筛出匹配项# 例:只记得刚才查过磁盘,输入 df
按一次回车即可重新执行;再按一次 CTRL-R 可切换为按时间顺序显示。
场景三:快速跳进某个目录
cd ~# 先创建几个层级目录mkdir -p ~/project/backend/config ~/project/frontend/src ~/docs
# 按 ALT-C,输入目录名关键字,选中后直接 cd 进入# 例:想进 ~/project/backend/config,输入 config
省去一层层 cd 的麻烦。
场景四:杀某个进程
# 先启动一个后台进程,作为待查找的目标sleep 1000 &
# 然后按 kill -9 后加两个星号再按 TAB,输入 sleep 选中kill -9 **
不用先 ps 查 PID 再手动抄下来,模糊补全会列出匹配的 PID 供选择。
场景五:在已安装的软件包里快速定位
# 列出 Debian 所有已安装的软件包,输入关键字瞬间筛选dpkg -l | fzf
例如输入 python,即可在数百个已装软件包里迅速找到 python3 等带 python 的软件包。
场景六:在任何命令的输出里挑选
# 从系统服务列表里挑一个(查看运行状态)systemctl list-units --type=service | fzf
5.2 基本使用
fzf 从 STDIN 读取列表,把选中的条目写到 STDOUT,因此可以嵌入任何命令管道:
# 从命令历史中模糊查找history | fzf
没有 STDIN 管道时,fzf 会遍历当前目录下的文件系统来生成文件列表。在查找器界面中,CTRL-K / CTRL-J(或 CTRL-P / CTRL-N)上下移动光标,Enter 选择条目,CTRL-C / CTRL-G / ESC 退出;多选模式(-m)下用 TAB 和 Shift-TAB 标记多个条目,并支持鼠标操作。
5.3 命令行快捷键
配置 shell 集成后,可在 bash、zsh、fish、Nushell 中使用以下快捷键:
- CTRL-T:遍历文件与目录,将选中路径粘贴到命令行
- CTRL-R:从命令历史中模糊查找命令;再次按下切换为按时间顺序排序
5.4 搜索语法
fzf 默认支持模糊匹配,输入的关键字可以不全、可以顺序不对,它会按匹配度排序。需要精确控制时,可用以下语法:
| | |
|---|
sbtrkt | | |
'wild | | |
'wild' | | |
^music | | |
.mp3$ | | |
!fire | | |
!^music | | |
!.mp3$ | | |
单个竖线字符(|)充当 OR 运算符:^core go$ | rb$ | py$ 匹配以 core 开头、且以 go、rb 或 py 结尾的条目。
5.5 预览窗口
用 --preview 选项开启预览窗口,fzf 自动以当前行为参数启动外部进程并显示结果,选中前就能看到内容:
# 预览文件内容(cat 为系统自带)find . -type f | fzf --preview 'cat {}'# 预览软件包详情dpkg -l | fzf --preview 'apt-cache show {2} 2>/dev/null | head -20'
若想获得彩色高亮的预览效果,可安装 bat 后把预览命令换成 bat --color=always {};不装 bat 时用系统自带的 cat 即可。
--preview-window 选项可自定义预览窗口的大小、位置和边框;预览窗口支持 ANSI 颜色与图片显示(Kitty graphics、iTerm2 inline images、Sixel 协议)。
5.6 常用环境变量与高级用法
# 默认输入来源:不传管道时用 find 生成文件列表export FZF_DEFAULT_COMMAND='find . -type f'# 默认选项:反向布局 + 底部 40% 高度export FZF_DEFAULT_OPTS='--height 40% --layout reverse --border'# 多选并把选中文件用 vi 打开(become 把 fzf 转变为新进程)fzf --multi --bind 'enter:become(vi {+})'# 交互式 grep 集成:输入时实时搜索当前目录下的文件内容: | fzf --bind 'start:reload:grep -rn ”” .' \ --bind 'change:reload:grep -rn {q} . || true' \ --bind 'enter:become(vi +{2} {1})' \ --ansi --disabled --delimiter : --nth 2..
其他常用选项可通过手册页查看:fzf --man 或 man fzf。