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

发布于 2026/8/6 · 1 阅读
fzf模糊查找命令行工具模糊匹配终端CTRL-R命令历史文件查找Go开发者工具
fzf 是韩国开发者 Junegunn Choi 用 Go 编写的通用命令行模糊查找器,以单个便携二进制分发、毫秒级处理数百万条数据。内置 Bash、Zsh、Fish、Vim 等集成,支持模糊补全、预览窗口与可编程事件绑定,GitHub 星标超 8 万。

封面.png

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

4. 安装

将整合包根目录中的 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 或几个不连续字母(如 ngx),列表实时收窄,回车即用 Vim 打开。

场景二:找回以前用过的命令(CTRL-R)

Shell 里按 CTRL-R,fzf 接管命令历史:输入任意片段,立刻从成千上万条历史命令中模糊匹配。比如只记得"上次部署的命令里带 kubernetes",敲几个关键词就能把它捞回来回车直接执行。

场景三:快速切换目录(ALT-C)

ALT-C,fzf 列出当前目录下的所有子目录,输入几个字母回车直接 cd 过去,告别手打一长串路径。

场景四:在超大目录里定位文件

配合 fdfind,在数万个文件的目录树里搜索并实时预览:

fd --type f | fzf --preview 'bat --color=always {}'

右侧预览窗口实时显示当前高亮文件的语法高亮内容,上下移动光标即可快速浏览。

场景五:管理进程

模糊选择要结束的进程,比 taskkillpsgrep 直观得多:

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 开头、以 gorbpy 结尾的条目。

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 + {+})。