Windows 下载、安装 fzf v0.74.2(附安装包fzf-0.74.2-windows_amd64.zip)
文章目录

1. fzf 简介
fzf 是韩国开发者 Junegunn Choi 用 Go 语言编写的一款通用型命令行模糊查找器(fuzzy finder),自 2013 年发布以来持续活跃维护。凭借单个便携二进制、毫秒级处理数百万条数据的极速表现,它已成为全球最受欢迎的终端工具之一,GitHub 星标超过 80,000 颗,被众多开发者称为"终端里最常用的工具"。
用大白话说,fzf 就是给任何"一行一行的列表"加上一个模糊搜索框:你从终端把一个列表交给它(比如文件清单、命令历史、进程列表),它立刻弹出一个可交互的界面,你只需敲几个字母,成千上万条记录就实时收窄到想要的几条,回车即完成选择。这个能力看似简单,却是命令行里最高频的需求,也是它长盛不衰的根本原因。
核心特点:
- 便携:单个二进制文件分发,Windows 下解压即用,无运行时依赖
- 快速:经过优化,可在毫秒级处理数百万条数据
- 可编程:事件驱动架构(
--bind),可构建自定义终端界面与工作流 - 模糊补全:
**<TAB>触发文件、目录、进程、主机名等模糊补全 - 交互式集成:CTRL-T 粘贴文件、CTRL-R 搜索命令历史、ALT-C 跳转目录
- 预览窗口:实时预览文件内容、图片,支持语法高亮
- 多 shell 支持:Bash、Zsh、Fish、Nushell、PowerShell 均可集成
- 跨平台:Windows、macOS、Linux、FreeBSD 等均可运行
2. v0.74.2 版本亮点
该版本汇集了 5 位贡献者 的 25 条 贡献。
性能优化:
- 短查询性能显著提升:单字符查询最快提速 2.4 倍,双字符查询最快提速 1.4 倍(短查询会扫描最大的候选集,首次按键会扫描全部输入)
- 搜索结果排序更快,跳过冗余的 radix 遍历
功能增强:
change-border-label和transform-border-label现在可作用于 tmux 或 Zellij 浮动面板(floating pane)的原生边框- fzf 现在可在 Windows 的
--height模式下检测终端尺寸变化(#4790)
Bug 修复:
- 修复预览命令中的 Kitty 图像序列被 tmux 误当作面板标题请求的问题
- 修复预览窗口顶部图像被
--preview-window ~N撕裂的问题 - 修复匹配高亮位置不确定的问题
- 修复 fzf 作为库使用时,
Run()返回后信号与 resize 处理程序残留的问题 - fish:修复历史记录命令受用户初始化脚本影响的问题,改进 CTRL-R 时间戳颜色
- zsh:修复存在 perl 时 CTRL-R 未传递 fzf 退出状态的问题;修复 ALT-C 导致
chpwd钩子函数被调用两次的问题
3. 获取安装包
如果访问 GitHub 不便,安装包及中文文档:https://hanshuixin.org/go/225B(内含 fzf-0.74.2-windows_amd64.zip、README 中英对照、发布说明中英对照和 LICENSE)。
Windows安装fzf-v0.74.2(fzf-0.74.2-windows_amd64).zip
├── fzf-0.74.2-windows_amd64.zip
├── Windows安装fzf-v0.74.2(fzf-0.74.2-windows_amd64).pdf
├── README/
│ ├── README.md
│ └── README-中文版.md
├── 发布说明/
│ ├── RELEASE-NOTES.md
│ └── RELEASE-NOTES-中文版.md
└── LICENSE4. 安装
将整合包根目录中的 fzf-0.74.2-windows_amd64.zip 解压到任意目录(如 C:\tools\fzf),将其中的 fzf.exe 所在路径添加到系统 PATH 环境变量,即可在命令行中使用。
4.1 关键配置(推荐)
fzf 需要设置 shell 集成才能发挥全部能力(CTRL-R、CTRL-T、ALT-C 等按键)。fzf 原生支持 Bash、Zsh、Fish、Nushell,在 Git Bash 或 WSL 的 Bash 配置文件中(~/.bashrc)添加:
eval "$(fzf --bash)"PowerShell 不是 fzf 原生支持的 shell,如需按键绑定可安装第三方脚本 PSFzf。不装也不影响使用——fzf.exe 本身可直接运行,只是少了 CTRL-R 等按键绑定。
常用环境变量:
| 变量 | 说明 | 默认值 | 配置建议值 |
|---|---|---|---|
FZF_DEFAULT_COMMAND |
无管道输入时的默认文件列表来源 | 递归遍历当前目录 | fd --type f --strip-cwd-prefix |
FZF_DEFAULT_OPTS |
fzf 全局默认选项 | 空 | --height 40% --layout reverse --border |
FZF_CTRL_R_OPTS |
CTRL-R 命令历史搜索的附加选项 | 空 | --preview 'bat -n --color=always {}' |
5. 使用
fzf 的使用思路只有一句话:把"一个列表"交给它,用模糊搜索挑出想要的。下面先看它最典型的使用场景和可直接照抄的命令,再讲细节。
5.1 典型使用场景
场景一:快速打开文件,不用背路径
在代码项目里,你常想"打开那个配置文件",但记不住完整路径。一条命令搞定:
vim $(fzf)回车后 fzf 列出当前目录下所有文件,你敲 conf 或几个不连续字母(如 n、g、x),列表实时收窄,回车即用 Vim 打开。
场景二:找回以前用过的命令(CTRL-R)
Shell 里按 CTRL-R,fzf 接管命令历史:输入任意片段,立刻从成千上万条历史命令中模糊匹配。比如只记得"上次部署的命令里带 kubernetes",敲几个关键词就能把它捞回来回车直接执行。
场景三:快速切换目录(ALT-C)
按 ALT-C,fzf 列出当前目录下的所有子目录,输入几个字母回车直接 cd 过去,告别手打一长串路径。
场景四:在超大目录里定位文件
配合 fd 或 find,在数万个文件的目录树里搜索并实时预览:
fd --type f | fzf --preview 'bat --color=always {}'右侧预览窗口实时显示当前高亮文件的语法高亮内容,上下移动光标即可快速浏览。
场景五:管理进程
模糊选择要结束的进程,比 taskkill 或 ps 加 grep 直观得多:
kill -9 $(ps -ef | fzf | awk '{print $2}')场景六:Git 工作流
切换分支、查看提交记录,都能交互式选择:
git checkout $(git branch | fzf)
git log --oneline | fzf --preview 'git show {}'场景七:通用选择器
任何"一行一条"的列表都能喂给 fzf 当选择器——选 SSH 主机、选 Docker 容器、选环境变量、选要 unset 的变量:
ssh $(cat ~/.ssh/config | grep '^Host ' | awk '{print $2}' | fzf)5.2 经典用法速查
| 目的 | 命令 |
|---|---|
| 用 Vim 打开当前目录下的文件 | vim $(fzf) |
| 打开文件并预览内容 | fd --type f | fzf --preview 'bat --color=always {}' |
| 模糊搜索命令历史 | 按 CTRL-R |
| 快速进入某个目录 | 按 ALT-C |
| 把文件路径粘贴到命令行 | 按 CTRL-T |
| 模糊选择并结束进程 | kill -9 $(ps -ef | fzf | awk '{print $2}') |
| 切换 Git 分支 | git checkout $(git branch | fzf) |
| 查看 Git 提交 | git log --oneline | fzf --preview 'git show {}' |
| 一次选择多个项目 | fzf -m(用 TAB / Shift-TAB 标记) |
| 把选中的文件喂给下一个命令 | fzf | xargs cat |
Windows 提示:以上
$(...)命令替换语法适用于 Git Bash 或 WSL;在 PowerShell 中改为(fzf),例如vim (fzf),或直接运行fzf后用鼠标或键盘选择,选中项会打印到终端。
5.3 基本使用
fzf 从 STDIN 读取列表,把选中的项目写入 STDOUT。不带管道时,fzf 会遍历当前目录下的文件系统:
find * -type f | fzf > selected
vim $(fzf)在 fzf 界面中:CTRL-K / CTRL-J 上下移动光标,Enter 选中,CTRL-C / ESC 退出;多选模式(-m)下用 TAB / Shift-TAB 标记多个项目。
5.4 模糊搜索语法
fzf 默认处于"扩展搜索模式"(extended-search mode),可输入多个用空格分隔的搜索词:
| 标记 | 匹配类型 | 说明 |
|---|---|---|
sbtrkt |
模糊匹配 | 匹配包含 sbtrkt 的项目 |
'wild |
精确匹配 | 匹配包含 wild 的项目 |
^music |
前缀精确匹配 | 匹配以 music 开头的项目 |
.mp3$ |
后缀精确匹配 | 匹配以 .mp3 结尾的项目 |
!fire |
反向精确匹配 | 匹配不包含 fire 的项目 |
竖线 | 作为 OR 运算符。例如 ^core go$ | rb$ | py$ 匹配以 core 开头、以 go、rb 或 py 结尾的条目。
5.5 命令行按键绑定
设置 shell 集成后,可直接在命令行使用:
- CTRL-T:粘贴选中的文件和目录到命令行
- CTRL-R:从历史记录中模糊搜索并粘贴命令
- ALT-C:跳转到选中的目录
5.6 预览窗口
--preview 选项可在分割窗口实时预览当前行:
fzf --preview 'bat --color=always {}' --preview-window '~3'预览窗口支持 ANSI 颜色,可用 Bat、Highlight 等程序做语法高亮;也可通过 Kitty、iTerm2、Sixel 协议预览图片。
5.7 转变为另一个进程
become(...) 动作可以把 fzf 变成执行命令的新进程,例如选中文件后用 Vim 打开:
fzf --bind 'enter:become(vim {})'相比 vim "$(fzf)",这种方法不会在按 ESC 退出时打开空文件,也能正确处理含空格的多个选择(--multi + {+})。