fzf

fzf

通用命令行模糊查找器,同时也是交互式终端工具包

核心功能

把文件列表、命令历史等任意候选集变成可交互模糊筛选的界面,并提供事件驱动的构建模块,让 shell 脚本升级成终端应用。适合长期在终端工作、希望减少输入与切换成本的开发者。

功能亮点

单文件二进制分发

以单个可执行文件发布,无额外运行时依赖,各平台安装都很省事

毫秒级筛选性能

经过针对性优化,可在毫秒级别处理百万量级的候选项

事件驱动可编程

通过 --bind 绑定按键与事件,把普通 shell 脚本改造成交互式界面

开箱即用的集成

自带多种 shell 与 Vim/Neovim 集成,配置后即可用 CTRL-R 搜历史

适用场景

• 在成千上万个文件中交互式挑选目标文件再交给编辑器打开
• 用 CTRL-R 模糊检索历史命令,替代反复按方向键翻历史
• 为脚本或运维工具搭一个自定义的终端选择菜单

安装配置

bash
Homebrew (macOS / Linux):
brew install fzf

Debian 9+ / Ubuntu 19.10+:
sudo apt install fzf

Fedora:
sudo dnf install fzf

Arch Linux:
sudo pacman -S fzf

Windows:
winget install fzf
choco install fzf
scoop install fzf

Git 克隆 + 官方安装脚本:
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

启用 shell 集成:
bash: eval "$(fzf --bash)"
zsh:  source <(fzf --zsh)
fish: fzf --fish | source

使用方法

bash
find * -type f | fzf > selected     # 从标准输入筛选,结果写入文件
vim $(fzf)                          # 选中文件后用 vim 打开
fzf --print0 | xargs -0 -o vim      # 更稳妥的写法,避免空结果问题
fzf --bind 'enter:become(vim {})'   # 回车后直接变成 vim 进程
fzf -m                              # 多选模式,用 TAB 标记多项
CTRL-T                              # 把选中的文件/目录粘贴到命令行
CTRL-R                              # 从命令历史中筛选
ALT-C                               # cd 进入选中的目录
vim **<TAB>                         # 触发模糊补全

关键指标

尚未核验对标产品,此处只列本工具自身指标,不做对比结论。

指标fzf
价格免费
开源
上手难度进阶

相关工具

同类工具

优点

  • 以单个二进制文件分发,安装与在团队内分发都很简单
  • 经过性能优化,百万量级候选项也能在毫秒内完成筛选
  • 自带 Bash/Zsh/Fish/Nushell/Vim/Neovim 集成与 CTRL-T、CTRL-R、ALT-C 绑定
  • 事件驱动架构,可用 --bind 自行拼装交互流程与界面

缺点

  • 只负责交互式筛选,候选列表通常仍需 find、rg、fd 等命令提供
  • 安装后需额外执行一步 shell 集成配置,快捷键才会生效
  • 高级定制集中在命令行选项与 --bind 表达式上,深入使用有学习成本