fzf 是一个通用的命令行模糊查找器,它为任何列表数据提供了一个交互式的过滤界面。它实现了一个模糊匹配算法,允许用户通过键入包含省略字符的模式来查找项目,这使得它非常适合快速过滤大量数据集,如文件、命令历史、进程、主机名、git 提交等。
本文档提供了 fzf 架构、核心系统和集成能力的总体概述。有关特定组件的更详细信息,请参阅其各自的文档页面。
fzf 的架构由几个关键组件组成,它们协同工作以提供其功能。
核心架构围绕以下主要组件展开
来源: README.md28-35 README.md373-400
fzf 中的数据流遵循以下步骤
来源: README.md253-288 README.md373-400
fzf 的核心是其模糊搜索系统,它允许灵活的模式匹配。
fzf 的默认搜索模式是“扩展搜索模式”,它支持复杂的模式匹配
| 标记 | 匹配类型 | 描述 |
|---|---|---|
sbtrkt | 模糊匹配 | 匹配 sbtrkt 的项目 |
'wild | 精确匹配(引用) | 包含 wild 的项目 |
'wild' | 精确边界匹配(带引号) | 在单词边界处包含 wild 的项目 |
^music | 前缀精确匹配 | 以 music 开头的项目 |
.mp3$ | 后缀精确匹配 | 以 .mp3 结尾的项目 |
!fire | 反向精确匹配 | 不包含 fire 的项目 |
!^music | 反向前缀精确匹配 | 不以 music 开头的项目 |
!.mp3$ | 反向后缀精确匹配 | 不以 .mp3 结尾的项目 |
| ` | ` | OR 操作符 |
来源: README.md373-400
fzf 支持不同的计分方案,针对不同类型的输入进行了优化
| 方案 | 描述 |
|---|---|
--scheme=default | 通用方案,旨在与任何类型的输入都能很好地配合 |
--scheme=path | 适用于文件路径,优先匹配路径分隔符后的内容 |
--scheme=history | 适用于命令历史,其中按时间顺序排序很重要 |
来源: README.md720-733
fzf 提供了一个丰富的终端用户界面,具有许多自定义选项。
fzf 提供几种显示模式以适应不同的用例
--height):在光标下方显示,并指定高度fzf --height 40%
--tmux):在 tmux 弹出窗口中打开fzf --tmux center,80%,40%
来源: README.md308-371
界面由以下部分组成
来源: README.md416-468 README.md427-442
fzf 包含强大的 shell 集成功能,可增强命令行体验。
fzf 为常见任务提供了方便的键绑定
--walker file,dir,follow,hidden--walker dir,follow,hidden来源: README.md492-540
fzf 通过模糊匹配功能扩展了 shell 补全。
来源: README.md544-710
fzf 可以与各种其他工具集成,创建一个广泛的生态系统。
fzf 提供了一个 Vim 插件,为编辑器提供了模糊查找功能
来源: README.md221-240
fzf 通过 --tmux 选项提供原生 tmux 集成
fzf-tmux 脚本也适用于旧版 tmux 或更复杂的用例。
来源: README.md341-362
fzf 可以启动一个 HTTP 服务器,允许外部控制
fzf 提供广泛的配置选项
来源: README.md392-415 man/man1/fzf.11192-1207
fzf 提供了一个丰富的系统,用于将键和事件绑定到操作
fzf 凭借其速度、灵活性和可扩展性,成为一款强大的命令行工具。其核心的模糊查找功能得到了丰富的功能集的补充,这些功能与 shell 环境和其他工具能够很好地集成。了解其架构和组件交互有助于用户充分发挥其潜力,提高命令行生产力。
来源: README.md27-33