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
本页面介绍了 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 的分发包中。您可以通过几种方式安装它:
将 fzf 目录添加到 Vim 的运行时路径中
使用 vim-plug 等插件管理器
使用 vim-plug 时,fzf#install() 函数可确保您拥有最新的二进制版本。如果 fzf 在 $PATH 中找不到,插件会询问您是否要下载最新的二进制文件。
来源: README-VIM.md7-52 plugin/fzf.vim147-167 plugin/fzf.vim204-256
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#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 命令提供了一个即用型文件选择器。
该命令使用 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
此变量定义了用于打开选定文件的按键绑定。
默认操作在 s:default_action 中定义,并由 fzf#wrap() 在未提供自定义 sink 时应用。当按下某个键时,通过 s:common_sink() 函数对选定的项目执行相应的操作。
来源: plugin/fzf.vim1075-1078 README-VIM.md116-134 plugin/fzf.vim314-357
控制 fzf 窗口的显示方式。
使用弹出窗口(window 具有字典值)时,有以下选项可用:
width 和 height (0-1 之间的浮点数或整数)xoffset、yoffset、relative、border默认布局由 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
自定义 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
启用按命令历史记录
设置此选项后,按下 CTRL-N 和 CTRL-P 将会在同一命令的先前查询之间导航。历史记录存储在指定目录中每个命名命令的单独文件中。
当设置了 g:fzf_history_dir 并且为 fzf#wrap() 提供了名称时,该函数会将 --history 选项添加到 fzf 命令中,指向指定目录中的历史记录文件。
来源: plugin/fzf.vim432-440 README-VIM.md172-174 plugin/fzf.vim433-439
fzf 可以在 Vim 中以多种方式显示
has('terminal') 或 has('nvim-0.2.1'){ 'window': { ... } },通过 s:popup_support() 检测up, down, left, 或 right 选项,在 s:split() 中实现{ 'tmux': '...' } 选项配合 tmux 3.2+,通过 s:tmux_enabled() 检查显示方式在 fzf#run() 中根据提供的选项和可用功能确定。
来源: plugin/fzf.vim540-549 plugin/fzf.vim807-858 plugin/fzf.vim589-614 plugin/fzf.vim137-139 README-VIM.md447-470
您可以使用 fzf#run 和 fzf#wrap 创建自定义命令
带自定义源和接收器的示例
:FZF 命令本身被实现为一个自定义命令,它使用 fzf#run 和 fzf#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 颜色与您的颜色方案不同,这一点尤其有用。
虽然内置的 Vim 集成提供了基础功能,但 fzf.vim 插件通过许多有用的命令进行了扩展,例如
:Files - 浏览文件:Buffers - 浏览缓冲区:Colors - 选择颜色方案:Rg - 使用 ripgrep 搜索内容