菜单

高级特性

相关源文件

此页面介绍了 fzf 的高级功能,这些功能使高级用户能够自定义和扩展其基本模糊查找之外的行为。这些功能可以实现更丰富的界面、自定义交互以及与其他命令行工具的无缝集成。有关基本用法和安装,请参阅概述安装

预览窗口

预览窗口是 fzf 最强大的功能之一,它允许您在不离开 fzf 界面的情况下检查文件内容、命令输出或与当前选定项相关的任何其他信息。

来源:src/options.go647-649 src/terminal.go1989-2108

基本配置

预览窗口通过 --preview 选项激活,该选项接受一个命令来为每个选定的项目运行。占位符 {} 会被当前选中的内容替换

为了获得更多控制,您可以使用字段索引表达式来提取选定行中的特定部分

预览窗口选项

预览窗口的外观和行为可以使用 --preview-window 进行自定义

主要选项包括

  • 位置:updownleftright(默认)
  • 大小:50%30 等。
  • 边框样式:border-noneborder-roundedborder-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, 等)

动态预览

预览命令可以是动态的,可以根据当前项目或查询进行更改

来源:man/man1/fzf.1741-825

颜色与主题

fzf 提供了广泛的颜色自定义选项,以匹配您的终端主题或提高可见性。

来源:src/options.go1183-1371(parseTheme),src/terminal.go983-984(tui.InitTheme)

基本配色方案

fzf 提供了几种内置的配色方案

  • dark:256 色终端的默认配色方案
  • light:浅色终端的配色方案
  • 16:16 色终端的配色方案
  • bw:无颜色(黑白)

来源:man/man1/fzf.1240-247

样式预设

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 为不同部分添加了独立的边框

来源:CHANGELOG.md197-236

键绑定自定义

fzf 允许对键盘快捷键进行广泛的自定义以触发各种操作。

来源:src/options.go1732-1776(parseKeymap),src/terminal.go458-599(actionType定义)

基本按键绑定

按键绑定通过 --bind 选项指定

这会将 Ctrl-J 绑定到接受当前选定项,并将 Ctrl-K 绑定到清除输入行。

来源:man/man1/fzf.11057-1059

可用操作

fzf 提供了超过 100 种不同的操作,可以绑定到按键或事件

  • 导航:updownpage-uppage-downhomeend
  • 选择:selectdeselecttoggleselect-alldeselect-all
  • 查询操作:clear-queryreplace-querychange-query
  • 预览控制:previewtoggle-previewrefresh-preview
  • 外部命令:executeexecute-silentbecome
  • 转换: transform, 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 实现动态配置

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)

Change 事件实现实时更新

reload 操作绑定到 change 事件可实现“实时”过滤

|| true 确保即使命令没有返回任何结果,fzf 也能继续运行。

来源: src/terminal.go1053-1056(hasStartActions, hasResultActions, etc.), src/terminal.go1541-1584(event handling)

同步与异步重载

fzf 同时提供 reloadreload-sync 操作

  • reload:异步,不阻塞 UI
  • reload-sync:同步,等待命令完成

来源: src/terminal.go584-585(actReload, actReloadSync), src/options.go1789-1790(reload and reload-sync)

Transform 操作用于状态管理

transform 操作通过执行命令并返回操作来实现复杂的工作流

来源: ADVANCED.md226-236

搜索和 Transform 搜索操作

searchtransform-search 操作允许使用任意查询字符串触发搜索

这使得可以实现超出 fzf 本身功能的能力的自定义搜索语法扩展。

来源: ADVANCED.md504-531

多项选择和处理

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} 将选择项写入临时文件

来源: man/man1/fzf.1764-789

HTTP API 集成

fzf 提供了一个 HTTP API,用于从外部进程控制其行为。

来源: src/options.go2958-2970(listen option), src/terminal.go1058-1065(listener)

启动 HTTP 服务器

--listen 选项启动一个 HTTP 服务器

如果端口被省略或为 0,fzf 会自动选择一个端口并将其导出为 FZF_PORT 环境变量。

来源: src/options.go2958-2970(listen option), src/terminal.go1058-1065(listener)

发送操作

您可以通过 POST 请求将操作发送到服务器

这使得外部进程能够在不进行直接键盘输入的情况下控制 fzf。

来源: man/man1/fzf.11089-1090

安全选项

默认情况下,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:使用块元素的边框
  • horizontalverticaltopbottomleftright:部分边框

来源: 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元素

您可以自定义各种UI元素

--ghost 选项在查询为空时显示提示文本。

来源: src/terminal.go2389-2392(ghost), src/options.go2629-2631(ghost option)

多行显示

fzf 0.53.0 添加了对显示多行项目的支持

对于多行项目,您可以使用 --marker-multi-line="╻┃╹" 来自定义标记。

来源: CHANGELOG.md463-478

标题和标题行

标题为fzf界面提供上下文

来源: man/man1/fzf.1968-1000