fzf:命令行模糊查找器
通用命令行模糊查找器与交互式终端工具箱,可快速筛选文件、命令历史等任意列表。
- 浏览
- 4
- 访问
- 0
- 下载
- 0
- 版本
- v0.74.5
- 平台
- Windows、macOS、Linux
详细介绍
项目简介
fzf 是一个通用的命令行模糊查找器,也是一个交互式终端工具箱。它从 STDIN 读取候选列表,并把选中项写到 STDOUT,因此可以嵌入任意 shell 脚本。无论是选择文件、浏览命令历史、预览数据、在复杂数据集中做模糊匹配导航,还是构建自定义菜单和工作流,fzf 都提供了把 shell 脚本变成丰富终端应用的积木。
<img src="https://raw.githubusercontent.com/junegunn/i/master/fzf-preview.png" width=640>
核心特点:
- Portable:以单个二进制文件分发,安装简单
- Fast:经过优化,可在毫秒级处理数百万条目
- Programmable:事件驱动架构,可构建自定义终端界面与工作流
- Batteries-included:自带 Bash、Zsh、Fish、Nushell、Vim、Neovim 集成
主要功能
- 从 STDIN 读取列表并交互式筛选,输出选中项
- 没有 STDIN 管道时,自动遍历当前目录下的文件系统获取文件列表
- 多种显示模式:
--height模式与--popup模式 - 支持搜索语法、环境变量配置与外观自定义
- Shell 集成:键绑定(CTRL-T、CTRL-R、ALT-C)与模糊补全
- 模糊补全支持文件与目录、进程 ID、主机名、环境变量 / 别名,并可为 bash 和 zsh 自定义补全
- 预览窗口与图片预览
- 支持在运行时重新加载候选列表(reload),可做交互式 ripgrep 集成、多数据源切换等
- 提供 Vim / Neovim 插件支持
安装与使用
使用 Homebrew(macOS 或 Linux):
brew install fzf
使用 mise:
mise use -g fzf@latest
Linux 发行版包管理器:sudo apt install fzf(Debian 9+/Ubuntu 19.10+)、sudo dnf install fzf(Fedora)、sudo pacman -S fzf(Arch Linux)、sudo apk add fzf(Alpine Linux)、sudo zypper install fzf(openSUSE)、nix-env -iA nixpkgs.fzf(NixOS)等。
Windows 包管理器:choco install fzf、scoop install fzf、winget install fzf。
使用 git 安装:
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
安装脚本会向 shell 配置文件添加内容,以修改 $PATH 并设置 shell 集成。也可以直接下载官方二进制:https://github.com/junegunn/fzf/releases
设置 shell 集成(键绑定与模糊补全):
# bash
eval "$(fzf --bash)"
# zsh
source <(fzf --zsh)
# fish
fzf --fish | source
Nushell 不支持管道到 source,安装脚本会在 autoload 目录生成文件;若未使用安装脚本,可手动生成:
mkdir ($nu.default-config-dir | path join "autoload")
fzf --nushell | save -f ($nu.default-config-dir | path join "autoload" "_fzf_integration.nu")
基本用法:
# 从管道读取列表,输出选中项
find * -type f | fzf > selected
# 无管道时遍历当前目录
vim $(fzf)
Vim/Neovim 插件(以 vim-plug 为例):
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
junegunn/fzf 提供基础库函数,fzf#install() 确保使用最新二进制;junegunn/fzf.vim 是另一个项目,提供多种实用命令。
升级方式随安装方式不同:git 安装执行 cd ~/.fzf && git pull && ./install,brew 执行 brew update; brew upgrade fzf,vim-plug 执行 :PlugUpdate fzf。
注意事项
--bash、--zsh、--fish、--nushell选项仅在较新版本的 fzf 中可用;旧版本或需要更精细控制时,可直接 source /shell 目录下的单个脚本,文件位置因包管理器而异(例如apt show fzf)。- 可在 source 脚本时把对应的
*_COMMAND变量设为空字符串来禁用 CTRL-T、CTRL-R、ALT-C 绑定,例如 bash:FZF_CTRL_R_COMMAND= FZF_ALT_C_COMMAND= eval "$(fzf --bash)";在 source 之后再设置变量不会生效。 - 使用 Neovim 且偏好 Lua 插件时,可考虑 fzf-lua。
本作品整理自 GitHub 开源项目 junegunn/fzf,原作者 @junegunn,许可证 MIT。中文介绍由 AI 根据项目 README 整理,以原仓库为准。
更新记录
- v0.74.5当前版本
修复 tmux 3.8+ 下 --popup 取消缩放的问题、--gap-line 截断字形簇、转义序列被部分消费与按键丢失、reload 后 focus 事件不触发等缺陷,并修复 fzf-tmux 与 zsh 补全的安全漏洞。
评论