在日常命令行操作中,无论是搜索文件、查找历史命令还是浏览进程列表,我们常常会因手动翻页、敲全名而浪费大量时间。
这里介绍一款能显著提升命令行体验的开源工具——fzf:一个用交互式模糊匹配帮你快速定位信息的命令行工具,让大列表筛选变得更直观、更高效。

项目简介
fzf 是一个用 Go 语言编写的通用命令行模糊查找器(fuzzy finder),常用在 Unix / Linux、macOS 和 Windows 命令行环境中。

你可以把 fzf 理解成一个交互式、功能增强版的 grep:它可以把任何类型的列表(如文件列表、命令历史、进程、主机名、书签、Git 提交等)交给一个交互式界面,然后通过用户输入的模糊短语快速筛选出你想要的项。

fzf 在 GitHub 上具有超高人气,项目在 GitHub 上有 76.5k+ star。

功能特性
-
交互式模糊过滤:输入片段即可匹配整个字符串,无需完整拼写,查找效率更高。

-
适用于任意列表:可对文件、命令历史、进程、主机名、Git 分支等任意标准输入列表进行模糊筛选。

-
轻量便携、无依赖安装:仅一个二进制文件,支持多平台安装和集成。
-
Shell 与编辑器集成:支持 Bash、Zsh、Fish 和 Vim / Neovim 插件集成,工作流更顺滑。

-
高度可定制:可以通过环境变量、键绑定和参数调整行为,例如 preview 窗口、快捷键等。

-
支持多选、预览等高级模式:可启用多选模式、实时内容预览、布局调整等操作。

快速安装使用
fzf 支持多平台安装方式,如在 macOS / Linux 上使用包管理器:
brew install fzf # macOS
sudo apt install fzf # Debian/Ubuntu
sudo dnf install fzf # Fedora
sudo pacman -S fzf # Arch
Window 通过 Chocolatey 或使用 Scoop 安装,建议在 WSL 中使用以获得完整体验。
choco install fzf
scoop install fzf
也可以通过 Git 克隆官方仓库并运行安装脚本:
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
安装后按提示启用 key bindings(如 Ctrl-T、Ctrl-R、Alt-C)即可。
进入终端后:
fzf
这会打开一个模糊筛选界面,你可以直接输入关键词开始筛选。很多人第一次用就会发现:原来“找东西”这件事可以这么省心。
基础管道使用
fzf 的核心是管道。任何产生文本输出的命令都可以通过管道 | 传递给 fzf。
# 搜索当前目录下的文件并编辑
vim $(fzf)
# 查找并切换Git分支
git branch | fzf | cut -c 3- | xargs git checkout
# 查找并结束进程
ps -ef | fzf | awk '{print $2}' | xargs kill
如果你正在做命令行效率优化、终端工作流改造这类实践,也可以到 云栈社区 的知识库里对比更多同类工具与方案。
Shell 快捷键(强烈推荐)
安装 Shell 集成脚本后,你会立刻获得三个特别顺手的快捷键:
Ctrl + T:搜索当前目录及子目录下的所有文件和目录,并将选中文件的路径粘贴到命令行当前光标处。
Ctrl + R:交互式搜索历史命令。相比系统自带的简陋搜索,fzf 会列出所有匹配项,支持模糊查询,一眼就能定位到你要的那条。
Alt + C:搜索并快速切换至指定目录。
这三个按键几乎覆盖了日常最高频的“找文件 / 找命令 / 切目录”场景。你是否也经常因为找不到之前执行过的命令而重复敲一遍?Ctrl + R 往往是最先让人“上瘾”的功能。
增强使用示例
1、带预览的 Git 分支切换
git branch | fzf --preview 'git log --oneline --graph -n 10 {-1}' --height 40% --layout=reverse | cut -c 3- | xargs git checkout
这个命令会在右侧预览窗口显示对应分支最近的提交记录,让你切换得更放心,也更不容易切错分支。
想系统梳理 Git 命令和分支管理习惯的话,可以顺带看看 开源实战 里大家对常用 Git 工作流的讨论与最佳实践。
2、使用 become 动作
这是一种更优雅的方式处理选择结果,可以避免传统命令替换 vim $(fzf) 在遇到空格或取消选择时的问题。
# 按下回车后,fzf 进程直接变成 vim 进程打开所选文件
fzf --bind 'enter:become(vim {})'
# 支持多选
fzf -m --bind 'enter:become(vim {+})'
如果你在 Linux / macOS 终端里做过复杂的管道拼接,就会知道“边界情况”(空格、空输入、取消)往往最磨人。become 就是为这类痛点准备的。
项目小结
fzf 的价值不在于替代 find、grep 等经典工具,而是作为一个“交互增强层”与它们协同工作:把原本繁琐、线性的命令行筛选过程,变成直观、即时的交互体验。你仍然用熟悉的命令产生列表,只是把“挑选”这一步交给 fzf 来做得更快、更舒服。
更多细节功能可以到项目地址查看:
https://github.com/junegunn/fzf
如果你还想继续扩展终端效率工具链(如 Bash 脚本、流水线、排障套路等),可以到 运维/DevOps/SRE 板块按场景查阅更多实战内容。