菜单

tmux 集成

fzf 通过 fzf-tmux 脚本提供与 tmux 的特殊集成。这允许 fzf 在 tmux 的分割窗格或弹出窗口中运行。

当在 spec 字典中指定 tmux 选项时,或者当设置了 g:fzf_prefer_tmux 时,fzf 将使用 fzf-tmux 脚本在 tmux 窗格或弹出窗口中显示 fzf。

对于 tmux 3.2 或更高版本,您可以使用弹出窗口。

fzf-tmux 脚本提供了各种布局选项,用于定位和调整 tmux 窗格或弹出窗口的大小。

来源: plugin/fzf.vim589-608 bin/fzf-tmux1-254 README-VIM.md471-481

Vim 集成

相关源文件

本页面介绍了 fzf 的 Vim 集成,它允许用户直接在 Vim 和 Neovim 文本编辑器中使用 fzf 的模糊查找功能。该集成提供了一套丰富的功能,用于在 Vim 环境中高效地进行文件导航、选择和命令执行。

有关 shell 集成信息,请参阅 Shell 集成

概述

Vim 集成包括两个核心函数:fzf#run()fzf#wrap(),以及一个基本的文件选择器命令 :FZF。这些组件协同工作,为 Vim 和 fzf 二进制文件提供了一个无缝的接口。

来源: plugin/fzf.vim499-578 README-VIM.md56-76

安装

Vim 插件包含在 fzf 的分发包中。您可以通过几种方式安装它:

  1. 将 fzf 目录添加到 Vim 的运行时路径中

  2. 使用 vim-plug 等插件管理器

使用 vim-plug 时,fzf#install() 函数可确保您拥有最新的二进制版本。如果 fzf 在 $PATH 中找不到,插件会询问您是否要下载最新的二进制文件。

来源: README-VIM.md7-52 plugin/fzf.vim147-167 plugin/fzf.vim204-256

核心功能

fzf#run()

fzf#run() 函数是 Vim 集成的核心组件。它使用指定的选项启动 fzf 进程并处理结果。

该函数接受一个包含选项的字典。

选项类型描述
source字符串/列表生成输入的命令或列表
sink字符串/函数引用选定项目的操作
sink*/sinklist函数引用多个选定的操作
options字符串/列表fzf 命令行选项
dir字符串工作目录
上/下/左/右字符串/数字窗口位置和大小
window字符串/字典窗口命令或弹出设置
tmux字符串tmux 弹出选项
exit函数引用调用退出状态的函数

示例

来源: plugin/fzf.vim499-578 README-VIM.md229-308

fzf#wrap()

fzf#wrap() 函数在将规范字典传递给 fzf#run() 之前,会用全局首选项扩展该字典。

使用示例

函数签名

fzf#wrap([name string], [spec dict], [fullscreen bool]) -> dict

在封装规范时,将应用以下全局首选项:

  • g:fzf_layout - 窗口位置和大小
  • g:fzf_action - 操作的按键绑定
  • g:fzf_colors - 颜色自定义
  • g:fzf_history_dir - 命令历史目录

来源: plugin/fzf.vim394-453 README-VIM.md323-392

:FZF 命令

:FZF 命令提供了一个即用型文件选择器。

该命令使用 s:cmd() 函数实现,该函数构建选项并调用 fzf#run(fzf#wrap())

默认情况下,它允许:

  • Enter 打开选定的文件
  • Ctrl-T 在新标签页中打开
  • Ctrl-X 在水平分割中打开
  • Ctrl-V 在垂直分割中打开

这些按键绑定在 s:default_action 中定义,并且可以通过 g:fzf_action 进行自定义。

来源: plugin/fzf.vim1075-1107 README-VIM.md78-101 plugin/fzf.vim314-357

配置选项

g:fzf_action 的按键绑定

此变量定义了用于打开选定文件的按键绑定。

默认操作在 s:default_action 中定义,并由 fzf#wrap() 在未提供自定义 sink 时应用。当按下某个键时,通过 s:common_sink() 函数对选定的项目执行相应的操作。

来源: plugin/fzf.vim1075-1078 README-VIM.md116-134 plugin/fzf.vim314-357

使用 g:fzf_layout 进行布局控制

控制 fzf 窗口的显示方式。

使用弹出窗口(window 具有字典值)时,有以下选项可用:

  • 必需:widthheight (0-1 之间的浮点数或整数)
  • 可选:xoffsetyoffsetrelativeborder

默认布局由 s:default_layout() 函数确定,该函数会检查弹出支持情况并返回相应的布局配置。

来源: plugin/fzf.vim130-145 plugin/fzf.vim141-145 README-VIM.md136-152 README-VIM.md447-470 plugin/fzf.vim359-377 README-VIM.md153-222 plugin/fzf.vim373-376

使用 g:fzf_colors 自定义颜色

自定义 fzf 颜色以匹配 Vim 的颜色方案

每个条目格式为:

'element': ['component', 'highlight-group1', 'highlight-group2', ...]
  • element 是要设置样式的 fzf UI 元素
  • component 是 'fg' 或 'bg'
  • highlight-group 是用于获取颜色的 Vim 高亮组

s:get_color() 函数从指定的高亮组中提取颜色,而 s:defaults() 函数则将颜色设置转换为 fzf 命令行选项。

元素描述
fg/bg/hl项目(前景/背景/高亮)
fg+/bg+/hl+当前项目(前景/背景/高亮)
preview-fg/preview-bg预览窗口文本和背景
gutter左侧边栏的背景
pointer当前行的指针(>
marker多选标记(>
border窗口边框
header标题
info信息行(匹配计数器)
spinner流式输入指示器
query查询字符串
disabled搜索禁用时的查询字符串
prompt查询前的提示符(>

来源: plugin/fzf.vim359-377 README-VIM.md153-222 plugin/fzf.vim373-376

通过 g:fzf_history_dir 启用命令历史记录

启用按命令历史记录

设置此选项后,按下 CTRL-NCTRL-P 将会在同一命令的先前查询之间导航。历史记录存储在指定目录中每个命名命令的单独文件中。

当设置了 g:fzf_history_dir 并且为 fzf#wrap() 提供了名称时,该函数会将 --history 选项添加到 fzf 命令中,指向指定目录中的历史记录文件。

来源: plugin/fzf.vim432-440 README-VIM.md172-174 plugin/fzf.vim433-439

显示方法

fzf 可以在 Vim 中以多种方式显示

  1. 终端缓冲区: 在现代 Vim (8+) 和 Neovim 中,使用 has('terminal')has('nvim-0.2.1')
  2. 弹出窗口: 在 Vim 8.2.191+ 或 Neovim 0.4+ 中,使用 { 'window': { ... } },通过 s:popup_support() 检测
  3. 分割窗口: 使用 up, down, left, 或 right 选项,在 s:split() 中实现
  4. Tmux 弹出窗口: 使用 { 'tmux': '...' } 选项配合 tmux 3.2+,通过 s:tmux_enabled() 检查
  5. 外部窗口: 适用于旧版本 Vim 的备用方法

显示方式在 fzf#run() 中根据提供的选项和可用功能确定。

来源: plugin/fzf.vim540-549 plugin/fzf.vim807-858 plugin/fzf.vim589-614 plugin/fzf.vim137-139 README-VIM.md447-470

创建自定义命令

您可以使用 fzf#runfzf#wrap 创建自定义命令

带自定义源和接收器的示例

:FZF 命令本身被实现为一个自定义命令,它使用 fzf#runfzf#wrap

来源: README-VIM.md359-392 plugin/fzf.vim1089-1105

高级用法技巧

自定义接收器函数

您可以使用函数引用作为接收器以进行高级处理

当函数用作接收器时,它会以选定的项目作为参数被调用。对于单选,sink 函数接收一个参数。对于多选,sink*sinklist 函数接收一个选定项目的数组。

来源: README-VIM.md123-134 plugin/fzf.vim991-1022

隐藏终端模式下的状态栏

通过隐藏状态栏可以改善 fzf 在终端模式下的外观

当 fzf 在终端缓冲区中启动时,缓冲区的插件类型被设置为 fzf(参见 s:execute_term() 中的 setf fzf)。这允许您设置 FileType fzf 自动命令来定制 fzf 窗口的外观。

来源: README-VIM.md483-488 plugin/fzf.vim976

终端颜色

在 Vim 和 Neovim 中,fzf 在终端缓冲区中启动。您可以配置终端颜色以匹配您的颜色方案。

如果您觉得默认的 ANSI 颜色与您的颜色方案不同,这一点尤其有用。

来源:README-VIM.md429-454

与 fzf.vim 集成

虽然内置的 Vim 集成提供了基础功能,但 fzf.vim 插件通过许多有用的命令进行了扩展,例如

  • :Files - 浏览文件
  • :Buffers - 浏览缓冲区
  • :Colors - 选择颜色方案
  • :Rg - 使用 ripgrep 搜索内容
  • 更多文件、缓冲区和内容查找命令

来源:README-VIM.md73 README.md216-224