此页面介绍了 fzf 的高级功能,这些功能使高级用户能够自定义和扩展其基本模糊查找之外的行为。这些功能可以实现更丰富的界面、自定义交互以及与其他命令行工具的无缝集成。有关基本用法和安装,请参阅概述和安装。
预览窗口是 fzf 最强大的功能之一,它允许您在不离开 fzf 界面的情况下检查文件内容、命令输出或与当前选定项相关的任何其他信息。
来源:src/options.go647-649 src/terminal.go1989-2108
预览窗口通过 --preview 选项激活,该选项接受一个命令来为每个选定的项目运行。占位符 {} 会被当前选中的内容替换
为了获得更多控制,您可以使用字段索引表达式来提取选定行中的特定部分
预览窗口的外观和行为可以使用 --preview-window 进行自定义
主要选项包括
up、down、left、right(默认)50%、30 等。border-none、border-rounded、border-sharp 等。wrap 启用换行follow 自动滚动到底部(类似 tail -f)来源:src/options.go1986-2089(parsePreviewWindowImpl),src/terminal.go1989-2108(resizePreviewWindows)
您可以通过按键绑定来控制预览窗口
可用的预览操作包括
toggle-preview:显示/隐藏预览窗口toggle-preview-wrap:切换预览中的换行refresh-preview:重新运行预览命令preview-up/down/page-up/page-down:在预览中导航来源:src/options.go1638-1670(parsePreviewWindow),src/terminal.go563-571(actPreviewUp, actPreviewDown, 等)
预览命令可以是动态的,可以根据当前项目或查询进行更改
fzf 提供了广泛的颜色自定义选项,以匹配您的终端主题或提高可见性。
来源:src/options.go1183-1371(parseTheme),src/terminal.go983-984(tui.InitTheme)
fzf 提供了几种内置的配色方案
dark:256 色终端的默认配色方案light:浅色终端的配色方案16:16 色终端的配色方案bw:无颜色(黑白)fzf 提供了风格预设,方便快速自定义
风格预设可以与边框样式结合使用
来源:src/options.go3075-3124(applyPreset)
您可以自定义各个颜色元素
关键颜色元素包括
fg/bg:默认前景色/背景色fg+/bg+:当前行的前景色/背景色hl/hl+:高亮子串(匹配项)info:信息行(匹配数)border:边框颜色prompt:提示符颜色pointer:指向当前行的指针marker:多选标记spinner:加载指示器header:标题栏颜色来源:src/options.go1183-1371(parseTheme),src/terminal.go1290-1365(颜色元素)
fzf 0.58.0 为不同部分添加了独立的边框
fzf 允许对键盘快捷键进行广泛的自定义以触发各种操作。
来源:src/options.go1732-1776(parseKeymap),src/terminal.go458-599(actionType定义)
按键绑定通过 --bind 选项指定
这会将 Ctrl-J 绑定到接受当前选定项,并将 Ctrl-K 绑定到清除输入行。
fzf 提供了超过 100 种不同的操作,可以绑定到按键或事件
up、down、page-up、page-down、home、endselect、deselect、toggle、select-all、deselect-allclear-query、replace-query、change-querypreview、toggle-preview、refresh-previewexecute、execute-silent、becometransform, transform-query, transform-prompt来源: src/terminal.go458-599(actionType定义), src/options.go1486-1731(parseActionList)
按键绑定也可以通过事件触发,而不是按键本身
常见事件包括
start: fzf 启动时触发change: 查询字符串更改时触发focus: 当前项更改时触发result: 结果列表更新时触发load: 加载新项时触发来源: src/terminal.go1053-1056(hasStartActions, hasResultActions, etc.), src/terminal.go1541-1584(event handling)
多个操作可以通过“+”连接起来
这为复杂的工作流程提供了强大的组合。
来源: src/options.go1486-1731(parseActionList), src/terminal.go662-668(processExecution)
transform 操作允许根据当前状态动态更改 fzf 的行为
来源: src/options.go1784-1871(isExecuteAction), src/terminal.go559-560(actTransform)
fzf 可以动态更新其内容,从而实现交互式工作流和实时更新。
来源: src/terminal.go584-585(actReload, actReloadSync), src/terminal.go1498-1585(UpdateList)
reload 操作允许动态更新列表
这对于需要刷新的命令很有用,例如显示进程、日志文件或任何正在更改的数据。
来源: src/terminal.go584(actReload), src/terminal.go1498-1585(UpdateList)
将 reload 操作绑定到 change 事件可实现“实时”过滤
|| true 确保即使命令没有返回任何结果,fzf 也能继续运行。
来源: src/terminal.go1053-1056(hasStartActions, hasResultActions, etc.), src/terminal.go1541-1584(event handling)
fzf 同时提供 reload 和 reload-sync 操作
reload:异步,不阻塞 UIreload-sync:同步,等待命令完成来源: src/terminal.go584-585(actReload, actReloadSync), src/options.go1789-1790(reload and reload-sync)
transform 操作通过执行命令并返回操作来实现复杂的工作流
search 和 transform-search 操作允许使用任意查询字符串触发搜索
这使得可以实现超出 fzf 本身功能的能力的自定义搜索语法扩展。
fzf 提供了强大的功能,用于同时选择和处理多个项目。
来源: src/options.go2521-2526(multi option), src/terminal.go1587-1627(output)
多项选择通过 --multi 选项激活
您可以限制选择的数量
来源: src/options.go2521-2526(multi option), src/terminal.go887-888(multi)
fzf 提供了多种用于管理多项选择的操作
select-all:选择所有过滤后的项deselect-all:清除所有选择toggle-all:切换所有项的选择状态toggle:切换当前项的选择状态toggle-up/down/in/out:切换并移动来源: src/terminal.go510-520(actToggle, actToggleAll, etc.), src/options.go1566-1569(toggle actions)
change-multi 操作允许动态更改多项选择行为
change-multi:启用多项选择,无限制change-multi(N):启用,最多选择 N 项change-multi(0):禁用多项选择来源: src/terminal.go482(actChangeMulti), src/options.go1691-1693(change-multi)
在预览和执行命令中,使用 {+} 来引用所有选中的项目
对于可能超出命令行限制的大量选择,请使用 {+f} 将选择项写入临时文件
fzf 提供了一个 HTTP API,用于从外部进程控制其行为。
来源: src/options.go2958-2970(listen option), src/terminal.go1058-1065(listener)
--listen 选项启动一个 HTTP 服务器
如果端口被省略或为 0,fzf 会自动选择一个端口并将其导出为 FZF_PORT 环境变量。
来源: src/options.go2958-2970(listen option), src/terminal.go1058-1065(listener)
您可以通过 POST 请求将操作发送到服务器
这使得外部进程能够在不进行直接键盘输入的情况下控制 fzf。
默认情况下,HTTP 服务器只接受来自 localhost 的连接。为增加安全性
FZF_API_KEY 环境变量来要求身份验证x-api-key HTTP 标头--listen-unsafe 允许远程进程执行(请谨慎使用)来源: src/options.go2958-2970(listen option), src/terminal.go904-905(listenUnsafe)
fzf 除了简单的模糊匹配之外,还提供了丰富的搜索语法。
来源: src/options.go539-545(Fuzzy, Extended options), src/options.go2371-2376(extended option)
fzf 支持不同的搜索模式
来源: src/options.go539-545(Fuzzy, Extended options), src/options.go2371-2376(extended option)
在扩展搜索模式下,fzf 支持特殊搜索运算符
term - 包含“term”的项目(模糊匹配)'term - 包含“term”的项目(精确匹配)^term - 以“term”开头的项目term$ - 以“term”结尾的项目!term - 不包含“term”的项目'term' - 包含“term”且具有词边界的项目来源: man/man1/fzf.144-66 CHANGELOG.md334-342
fzf 提供不同的评分方案,针对不同类型的输入进行了优化
default:通用评分path:针对文件路径进行了优化,在路径分隔符之后进行匹配会获得额外加分history:针对时间列表进行了优化,其中最近的项比匹配质量更重要来源: src/options.go1106-1117(parseScheme), src/options.go2401-2407(scheme option)
您可以使用 --nth 将搜索限制在特定字段,并使用 --with-nth 更改显示方式
字段索引可以使用范围和负数索引
1..3:字段 1 到 3-1:最后一个字段2..-1:从第 2 个字段到最后一个字段来源: src/options.go760-775(splitNth), src/options.go2467-2490(nth and with-nth options)
fzf 提供了高级终端功能,用于创建丰富、交互式的界面。
来源: src/terminal.go1776-2237(resizeWindows), src/options.go883-921(parseBorder)
fzf 支持多种边框样式和带标签的边框
边框样式包括
rounded:带圆角的边框(默认)sharp:带尖角的边框bold:带粗线的边框double:带双线的边框block:使用块元素的边框horizontal、vertical、top、bottom、left、right:部分边框来源: src/options.go883-921(parseBorder), src/terminal.go2239-2271(printLabel)
您可以自定义 fzf 的布局
来源: src/options.go1944-1955(parseLayout), src/terminal.go1776-1780(resizeWindows中的布局)
信息行(显示匹配计数)可以有不同的样式
来源: src/options.go1957-1982(parseInfoStyle), src/terminal.go2410-2606(printInfoImpl)
您可以自定义各种UI元素
--ghost 选项在查询为空时显示提示文本。
来源: src/terminal.go2389-2392(ghost), src/options.go2629-2631(ghost option)
fzf 0.53.0 添加了对显示多行项目的支持
对于多行项目,您可以使用 --marker-multi-line="╻┃╹" 来自定义标记。
标题为fzf界面提供上下文