macOS 下载、安装 fzf v0.74.2(附安装包fzf-0.74.2-darwin_arm64.tar.gz)
文章目录

1. fzf 简介
fzf(command-line fuzzy finder)是一款通用型命令行模糊查找器,由韩国开发者 Junegunn Choi 于 2013 年创建,采用 Go 语言编写,以 MIT 开源许可证发布。GitHub 上已获得 超过 79,000 颗星标(Stars),跻身 GitHub 仓库的前 1%,是终端领域最受欢迎的开源工具之一,至今仍保持高频迭代(2026 年已发布到 v0.74 系列)。
fzf 本质上是一个通用的交互式过滤器,可以对任何类型的列表进行实时过滤和搜索——文件、命令历史、进程列表、Git 提交记录、主机名、书签等。它最特别之处在于模糊匹配算法:无需输入完整精确的关键词,只需输入几个散落的字母即可快速定位目标(例如输入 gtcmt 即可匹配 git commit)。项目凭借"相见恨晚"的极致效率,被众多开发者称为"命令行效率神器",并已收录于各大 Linux 发行版及 macOS 官方仓库。
fzf 的核心特点:
- 极致性能:基于 Go 语言并发特性,毫秒级响应,即使处理数百万条记录(如日志文件过滤)依然流畅
- 单文件分发:编译为单一二进制文件,零运行时依赖,轻量便携,开箱即用
- 可编程架构:事件驱动设计,支持
--bind机制绑定按键与动作,可用于构建自定义终端界面与工作流 - 实时预览:
--preview选项可在分割窗口实时渲染当前行的内容(文件内容、图片、命令输出等) - 跨平台:支持 Linux、macOS、Windows,官方提供各平台预编译二进制
- Shell 集成:无缝集成 Bash、Zsh、Fish、Nushell,提供
CTRL-T(查找文件)、CTRL-R(搜索历史)、ALT-C(跳转目录)三大快捷键 - 编辑器集成:提供 Vim/Neovim 官方插件(fzf.vim)、fzf-lua,及 Emacs 的 fzf.el
- 模糊补全:输入
vim **<TAB>即可对文件、目录、进程、主机名、环境变量等进行模糊补全 - 生态庞大:与 ripgrep、fd、bat、git、tmux 等工具无缝组合,社区衍生项目数以百计
2. v0.74.2 版本亮点
该版本汇集了 5 位贡献者 的 25 条 贡献。
- 短查询性能大幅提升:针对短查询进行了专门的性能优化。由于短查询扫描的候选集最大、第一次按键就要遍历全部输入,此次优化让单字符查询提速最高 2.4 倍、双字符查询提速最高 1.4 倍
- 结果排序更快:搜索结果排序跳过冗余的基数排序(radix sort)轮次,整体响应更迅速
- tmux/Zellij 浮动面板增强:
change-border-label和transform-border-label现在可以作用于 tmux 或 Zellij 浮动面板的原生边框;同时修复了预览命令发出的 Kitty 图形序列被 tmux 误当作面板标题请求的问题 - 预览窗口修复:修复
--preview-window ~N导致预览顶部图片撕裂、以及匹配高亮位置不确定的问题 - 库模式修复:修复将 fzf 作为库使用时,
Run()返回后信号与窗口缩放处理程序仍残留的问题 - Windows 增强:fzf 现在可在 Windows 的
--height模式下检测终端窗口尺寸变化(#4790) - Shell 集成修复:修复 fish 历史命令受用户初始化脚本影响、zsh 下 perl 可用时 CTRL-R 不传递 fzf 退出状态、以及 ALT-C 导致
chpwd钩子被调用两次等问题
3. 获取安装包
如果访问 GitHub 不便,安装包及中文文档:https://hanshuixin.org/go/225A(内含 fzf-0.74.2-darwin_arm64.tar.gz、README 中英对照、发布说明中英对照和 LICENSE)。
fzf 其他版本:https://hanshuixin.org/resource/software_integrated_package/macOS/fzf
macOS安装fzf-v0.74.2(fzf-0.74.2-darwin_arm64).zip
├── fzf-0.74.2-darwin_arm64.tar.gz ← 解压后得到 fzf 可执行文件
├── macOS安装fzf-v0.74.2(fzf-0.74.2-darwin_arm64).pdf
├── README/
│ ├── README.md
│ └── README-中文版.md
├── 发布说明/
│ ├── RELEASE-NOTES.md
│ └── RELEASE-NOTES-中文版.md
└── LICENSE4. 安装
fzf 是命令行工具,采用压缩包形式分发。将 fzf-0.74.2-darwin_arm64.tar.gz 解压后得到一个 fzf 可执行文件,把该文件放到 PATH 路径下(如 /usr/local/bin)并赋予执行权限即可:
tar -xzf fzf-0.74.2-darwin_arm64.tar.gz
chmod +x fzf
mv fzf /usr/local/bin/本安装包适用于 macOS arm64(Apple Silicon,M 系列芯片)。macOS 主流使用方式还可通过 Homebrew 安装:
brew install fzf,安装包方式适合无法访问 GitHub 下载不便的场景。
4.1 启用 Shell 集成
fzf 安装后,还需在 shell 配置文件中添加一行以启用快捷键与模糊补全:
# bash(添加到 ~/.bashrc)
eval "$(fzf --bash)"
# zsh(添加到 ~/.zshrc)
source <(fzf --zsh)
# fish(添加到 config.fish)
fzf --fish | source5. 使用
5.1 使用场景
fzf 解决的核心问题只有一个:在终端里"找东西"。日常敲命令时我们经常要面对以下几种情况,fzf 都能一条命令(或一个快捷键)搞定:
- 想打开某个文件,但记不住完整路径:项目里的文件往往藏在层层目录里,fzf 只需输入文件名的几个字母即可从整个目录树中模糊定位,不用再
cd半天。 - 想找回一条之前敲过的命令:终端历史几百上千条,上下翻找很痛苦。按
CTRL-R输入一两个关键词,fzf 会实时模糊匹配历史命令,回车即可重新执行。 - 想跳转到某个常用目录:
cd深层路径要一级级输入,用ALT-C或cd **<TAB>可以直接在目录列表中搜索,选中即跳转。 - 想结束某个进程,但不想先记住 PID:
ps aux | fzf边搜索边看到完整进程信息,选中后自动提取 PID 结束进程。 - 想在多个 Git 分支/提交中切换:分支名记不全时,
git branch | fzf输入关键字直接选中切换。 - 想在几万行日志或命令输出中快速定位:把输出管道给 fzf,输入关键字实时过滤,还可以配合预览窗口边看边选。
- 想在代码库里做交互式全文搜索:配合 ripgrep,fzf 变成"终端里的代码搜索面板",每敲一个字符就重新搜索一次,选中直接跳到对应文件行号。
一句话总结:凡是"从一堆东西里挑一个"的操作,都可以交给 fzf——输入几个字母,剩下的交给模糊匹配。
5.2 经典用法案例
下面是几个开箱即用的经典用法,复制到终端即可体验:
案例 1:快速打开文件
vim $(fzf)fzf 会列出当前目录(及子目录)的所有文件,输入文件名的一部分(比如 conf)就能过滤出 config.yaml、nginx.conf 等,回车即在 Vim 中打开。
案例 2:交互式搜索命令历史
history | fzf配合 Shell 集成后直接按 CTRL-R 更顺手。输入任意关键词(如 docker、ssh)即可从全部历史命令中模糊匹配,选中后回车重新执行,比 shell 自带的 CTRL-R 好用得多。
案例 3:快速切换 Git 分支
git checkout $(git branch | fzf)列出所有本地分支,输入分支名的几个字母过滤,回车即完成 git checkout。查看提交历史同理:git log --oneline | fzf。
案例 4:查找并结束进程
ps aux | fzf | awk '{print $2}' | xargs kill -9ps aux 输出每行是一个进程,fzf 让你边搜边看完整命令行,选中后 awk 提取第二列的 PID,交给 kill 结束。比 pgrep + kill 直观得多。
案例 5:实时过滤日志
tail -f app.log | fzf日志持续输出时,fzf 界面里输入关键词即可实时过滤匹配行,是排查线上问题时的利器。
案例 6:交互式全文搜索代码(配合 ripgrep)
rg --line-number . | fzf --delimiter : --preview 'sed -n "{2}p" {1}'以"文件:行号"的形式列出所有匹配位置,预览窗口直接显示该行代码,回车即可定位。这是 fzf 最强大的玩法之一。
案例 7:多选文件统一处理
fzf --multi | xargs rm用 TAB 标记多个文件(多选模式),回车后统一交给后续命令处理——删除、复制、批量改名都适用。
5.3 基本用法
fzf 会启动交互式查找器,从 STDIN 读取列表,并将选中项写入 STDOUT:
# 遍历当前目录下所有文件(无管道输入时自动遍历文件系统)
vim $(fzf)
# 与其他命令管道组合
find . -type f | fzf > selected
ps aux | fzf | awk '{print $2}' | xargs kill
git branch | fzf
history | fzf5.4 键盘操作
CTRL-K/CTRL-J(或CTRL-P/CTRL-N)上下移动光标Enter选中条目,CTRL-C/CTRL-G/ESC退出- 多选模式(
-m)下用TAB/Shift-TAB标记多个条目 - 支持鼠标滚动、单击、双击
5.5 搜索语法
fzf 默认处于"扩展搜索模式",可输入多个以空格分隔的搜索词:
| 标记 | 匹配类型 | 说明 |
|---|---|---|
sbtrkt |
模糊匹配 | 匹配包含 sbtrkt 的条目 |
'wild |
精确匹配 | 匹配包含 wild 的条目 |
^music |
前缀精确匹配 | 匹配以 music 开头的条目 |
.mp3$ |
后缀精确匹配 | 匹配以 .mp3 结尾的条目 |
!fire |
反向精确匹配 | 匹配不包含 fire 的条目 |
|(竖线) |
逻辑或 | 匹配以 core 开头且以 go、rb 或 py 结尾的条目 |
例如查询 ^core go$ | rb$ | py$ 会匹配以 core 开头且以 go、rb 或 py 结尾的条目。
5.6 常用快捷键(Shell 集成)
启用 Shell 集成后,在命令行中直接可用:
CTRL-T:查找文件并粘贴到命令行CTRL-R:搜索命令历史并执行ALT-C:查找目录并跳转(cd)
5.7 模糊补全
输入 vim **<TAB> 可对文件进行模糊补全(可用 TAB 多选);cd **<TAB> 补全目录;kill -9 **<TAB> 补全进程;ssh **<TAB> 补全主机名;export **<TAB> 补全环境变量。
5.8 实时预览
--preview 选项可实时预览当前行内容,配合语法高亮工具效果更佳:
# 预览文件内容(配合 bat 语法高亮)
fzf --preview 'bat --color=always {}'
# 只读指定目录下的文件
fzf --preview 'file {}' --preview-window up,1,border-horizontal5.9 常用环境变量
| 变量 | 说明 |
|---|---|
FZF_DEFAULT_COMMAND |
默认生成候选列表的命令(如 export FZF_DEFAULT_COMMAND='fd --type f') |
FZF_DEFAULT_OPTS |
默认选项(如 --layout=reverse --inline-info) |
FZF_CTRL_T_OPTS |
附加到 CTRL-T 的选项 |
FZF_CTRL_R_OPTS |
附加到 CTRL-R 的选项 |
FZF_ALT_C_OPTS |
附加到 ALT-C 的选项 |