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

发布于 2026/8/6 · 1 阅读
fzf模糊查找终端工具命令行效率工具GitHub开源软件macOSCtrl+R模糊匹配
fzf 是通用型命令行模糊查找器,输入几个散落字母即可秒速定位文件、命令历史、进程等任意列表,支持实时预览与 Shell 集成,被誉为终端效率神器。

封面.png

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-labeltransform-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
└── LICENSE

4. 安装

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 | source

5. 使用

5.1 使用场景

fzf 解决的核心问题只有一个:在终端里"找东西"。日常敲命令时我们经常要面对以下几种情况,fzf 都能一条命令(或一个快捷键)搞定:

  • 想打开某个文件,但记不住完整路径:项目里的文件往往藏在层层目录里,fzf 只需输入文件名的几个字母即可从整个目录树中模糊定位,不用再 cd 半天。
  • 想找回一条之前敲过的命令:终端历史几百上千条,上下翻找很痛苦。按 CTRL-R 输入一两个关键词,fzf 会实时模糊匹配历史命令,回车即可重新执行。
  • 想跳转到某个常用目录cd 深层路径要一级级输入,用 ALT-Ccd **<TAB> 可以直接在目录列表中搜索,选中即跳转。
  • 想结束某个进程,但不想先记住 PIDps aux | fzf 边搜索边看到完整进程信息,选中后自动提取 PID 结束进程。
  • 想在多个 Git 分支/提交中切换:分支名记不全时,git branch | fzf 输入关键字直接选中切换。
  • 想在几万行日志或命令输出中快速定位:把输出管道给 fzf,输入关键字实时过滤,还可以配合预览窗口边看边选。
  • 想在代码库里做交互式全文搜索:配合 ripgrep,fzf 变成"终端里的代码搜索面板",每敲一个字符就重新搜索一次,选中直接跳到对应文件行号。

一句话总结:凡是"从一堆东西里挑一个"的操作,都可以交给 fzf——输入几个字母,剩下的交给模糊匹配。

5.2 经典用法案例

下面是几个开箱即用的经典用法,复制到终端即可体验:

案例 1:快速打开文件

vim $(fzf)

fzf 会列出当前目录(及子目录)的所有文件,输入文件名的一部分(比如 conf)就能过滤出 config.yamlnginx.conf 等,回车即在 Vim 中打开。

案例 2:交互式搜索命令历史

history | fzf

配合 Shell 集成后直接按 CTRL-R 更顺手。输入任意关键词(如 dockerssh)即可从全部历史命令中模糊匹配,选中后回车重新执行,比 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 -9

ps 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 | fzf

5.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 开头且以 gorbpy 结尾的条目

例如查询 ^core go$ | rb$ | py$ 会匹配以 core 开头且以 gorbpy 结尾的条目。

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-horizontal

5.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 的选项