Nvim 的 :help
页面,生成 自 源 使用 tree-sitter-vimdoc 解析器。
options
参数是一个具有以下(可选)键的映射override
决定如何解析 UI 功能。ext_cmdline
外部化命令行。 ui-cmdlineext_tabline
外部化选项卡栏。 ui-tablineext_termcolors
使用外部默认颜色。term_name
设置终端的名称 'term'。term_colors
设置支持的颜色数量 't_Co'。stdin_tty
表示 stdin
是否是 tty
。stdout_tty
表示 stdout
是否是 tty
。ui_options
键以查看支持的选项。['notification', 'redraw', [ ['grid_resize', [2, 77, 36]], ['grid_line', [2, 0, 0, [[' ' , 0, 77]], false], [2, 1, 0, [['~', 7], [' ', 7, 76]], false], [2, 9, 0, [['~', 7], [' ', 7, 76]], false], ... [2, 35, 0, [['~', 7], [' ', 7, 76]], false], [1, 36, 0, [['[', 9], ['N'], ['o'], [' '], ['N'], ['a'], ['m'], ['e'], [']']], false], [1, 36, 9, [[' ', 9, 50]], false], [1, 36, 59, [['0', 9], [','], ['0'], ['-' ], ['1'], [' ', 9, 10], ['A'], ['l', 9, 2]], false] ], ['msg_showmode', [[]]], ['win_pos', [2, 1000, 0, 0, 77, 36]], ['grid_cursor_goto', [2, 0, 0]], ['flush', []] ] ]必须按顺序处理事件。Nvim 在完成整个屏幕的重绘时(因此所有窗口都对缓冲区状态、选项等具有一致的视图)发送“flush”事件。在整个屏幕重绘完成之前,可能会发送多个“redraw”批处理,并且只有最后一个批处理之后才会发送“flush”。用户只应该看到最终状态(当发送“flush”时),而不是处理批处理数组的一部分时出现的任何中间状态,或者是在没有以“flush”结尾的批处理之后出现的任何状态。
nvim --embed
Nvim 会在加载启动文件和读取缓冲区之前暂停,以便 UI 有机会调用请求并进行早期初始化。一旦 UI 调用 nvim_ui_attach(),启动就会继续进行。nvim_command("autocmd VimEnter * call rpcrequest(1, 'vimenter')")
4. 现在调用 nvim_ui_attach()。UI 现在必须处理用户输入:源 init.vim 和加载缓冲区可能会导致阻塞提示。command | nvim -
对内置 TUI 所调用功能一样。 -- 嵌入进程可以检测到它的 stdin 是否对一个不是终端的文件开放,就像 Nvim 所做的一样。然后,它需要将该 fd 转发给 Nvim。由于 fd=0 已经用于从嵌入器发送 rpc 数据到 Nvim,因此它需要使用其他文件描述符,如 fd=3 或更高。stdin_fd
选项传递给 nvim_ui_attach
,Nvim 将隐式地将其读取为缓冲区。该选项只能在使用 --embed
选项启动 Nvim 时使用,如上所述。cursor_style_enabled
是一个布尔值,表示 UI 是否应该设置光标样式。mode_info
是模式属性映射列表。当前模式由 mode_change
事件的 mode_idx
字段给出。cursor_shape
: "block", "horizontal", "vertical" cell_percentage
: 光标占用的单元格百分比。 blinkwait
, blinkon
, blinkoff
: 参见 cursor-blinking。 attr_id
: 光标属性 ID(由 hl_attr_define
定义)。当 attr_id 为 0 时,背景和前景颜色应该互换。 attr_id_lm
: 当 :lmap 处于打开状态时的光标属性 ID。 short_name
: 模式代码名称,参见 'guicursor'。 name
: 模式描述性名称。 mouse_shape
:(待实现。)hl_id
: 改用 attr_id
。 id_lm
: 改用 attr_id_lm
。name
是以下选项之一mode
参数是一个字符串,表示当前模式。mode_idx
是在 mode_info_set
事件中发出的数组中的索引。UI 应该根据相应项中指定的属性更改光标样式。报告的模式集将在 Nvim 的新版本中发生变化,例如,更多子模式和临时状态可能会表示为单独的模式。grid_line
事件来更新屏幕行的内容(而旧协议使用的是光标、突出显示和文本事件的组合)grid
索引作为第一个参数。网格 1 是用于整个编辑器屏幕状态的默认全局网格。ext_linegrid
功能本身永远不会导致创建任何其他网格;要启用每个窗口的网格,请激活 ui-multigrid。grid
的大小。如果客户端之前没有看到grid
,则会创建具有此大小的新grid
。cterm_fg
和cterm_bg
指定在 256 色终端中使用的默认颜色代码。ext_termcolors
选项,未设置的颜色将使用-1。这对于 TUI 实现非常有用,因为预期会使用终端内置(“ANSI”)默认值。id
将突出显示添加到突出显示表中,其属性由rgb_attr
和cterm_attr
字典指定,包含以下(全部可选)键。foreground
:前景色。background
:背景色。special
:用于各种下划线的颜色(如果存在)。reverse
:反转视频。前景色和背景色互换。italic
:斜体文本。bold
:粗体文本。strikethrough
:删除线文本。underline
:下划线文本。该线使用special
颜色。undercurl
:下划线文本。该下划线使用special
颜色。underdouble
:双下划线文本。该线使用special
颜色。underdotted
:点下划线文本。该点使用special
颜色。underdashed
:虚线文本。该虚线使用special
颜色。altfont
:替代字体。blend
:混合级别(0-100)。UI 可以使用它来支持将浮动窗口混合到背景或指示透明光标。url
:与该突出显示关联的 URL。UI 应将该区域显示为可单击的超链接。id
0 始终用于默认突出显示,其颜色由default_colors_set
定义,并且不应用任何样式。id
值。在这种情况下,Nvim 将始终发出受重新定义的 id 影响的屏幕单元格的重绘,因此 UI 不需要自行跟踪。info
默认情况下是一个空数组,将在下面解释的ui-hlstate扩展中使用。name
已设置为使用先前hl_attr_define
调用定义的属性hl_id
。此事件不需要呈现直接使用属性 id 的网格,但对于希望使用一致突出显示来呈现自身元素的 UI 很有用。例如,使用ui-popupmenu事件的 UI 可能会使用hl-Pmenu系列内置突出显示。grid
上row
的连续部分,从列col_start
开始。cells
是一个数组,其中每个数组包含 1 到 3 个元素:[text(, hl_id, repeat)]
。text
是要放在单元格中的 UTF-8 文本,其突出显示hl_id
由先前hl_attr_define
调用定义。如果hl_id
不存在,则应使用相同调用中最最近看到的hl_id
(始终针对事件中的第一个单元格发送)。如果repeat
存在,则应将单元格重复repeat
次(包括第一次),否则只重复一次。repeat
。wrap
是一个布尔值,指示该行是否换行到下一行。重新绘制换行到下一行的行时,Nvim 将发出一个grid_line
事件,该事件覆盖行的最后一列,并将wrap
设置为 true,然后紧随其后的是一个从下一行第一列开始的grid_line
事件。grid
。grid
将不再使用,UI 可以释放与它关联的任何数据。grid
成为当前网格,并将row, col
设为该网格上的光标位置。此事件将在一个redraw
批次中最多发送一次,并指示可见的光标位置。grid
的区域。从语义上讲,这与编辑器滚动无关,而是说“复制这些屏幕单元格”的一种优化方法。rows
大于 0,则向上移动 SR 中的矩形,这可能在向下滚动时发生。+-------------------------+ | (clipped above SR) | ^ |=========================| dst_top | | dst (still in SR) | | +-------------------------+ src_top | | src (moved up) and dst | | |-------------------------| dst_bot | | src (invalid) | | +=========================+ src_bot
rows
小于零,则向下移动 SR 中的矩形,这可能在向上滚动时发生。+=========================+ src_top | src (invalid) | | |------------------------ | dst_top | | src (moved down) and dst| | +-------------------------+ src_bot | | dst (still in SR) | | |=========================| dst_bot | | (clipped below SR) | v +-------------------------+
cols
始终为零,并为将来使用保留。set_scroll_region
不同,后者是尾部包含的。width
和height
单元格。attrs
是一个字典,包含以下键。任何缺失的键都将重置为其默认值。颜色默认值由update_fg
等更新设置。所有布尔键默认为 false。foreground
:前景色。background
:背景色。special
:用于各种下划线的颜色(如果存在)。reverse
:反转视频。前景色和背景色互换。italic
:斜体文本。bold
:粗体文本。strikethrough
:删除线文本。underline
:下划线文本。该线使用special
颜色。undercurl
:下划线文本。该下划线使用special
颜色。underdouble
:双下划线文本。该线使用special
颜色。underdotted
:点下划线文本。该点使用special
颜色。underdashed
:虚线文本。该虚线使用special
颜色。text
放在光标位置(并移动光标),并使用最后一次highlight_set
更新设置的突出显示。scroll
使用的滚动区域。+-------------------------+ | (clipped above SR) | ^ |=========================| dst_top | | dst (still in SR) | | +-------------------------+ src_top | | src (moved up) and dst | | |-------------------------| dst_bot | | src (cleared) | | +=========================+ src_bot
+=========================+ src_top | src (cleared) | | |------------------------ | dst_top | | src (moved down) and dst| | +-------------------------+ src_bot | | dst (still in SR) | | |=========================| dst_bot | | (clipped below SR) | v +-------------------------+
ext_hlstate
扩展允许 UI 接收有关单元格中活动突出显示的语义描述。在此模式下,突出显示将在表中预定义,请参见ui-event-hl_attr_define和ui-event-grid_line。hl_attr_define
中的info
参数将包含突出显示的语义描述。由于突出显示组可以组合,因此它将是一个项目的数组,其中具有最高优先级的项目位于最后。每个项目都是一个字典,包含以下可能的键kind
:始终存在。以下值之一: "ui":内置 UI 突出显示。 highlight-groups "syntax":由语法声明或其他运行时/插件功能(如nvim_buf_add_highlight())应用于缓冲区的突出显示 "terminal":来自终端模拟器中运行的进程的突出显示。不包含任何其他语义信息。ui_name
:来自highlight-groups的突出显示名称。仅适用于 "ui" 种类。hi_name
:使用属性定义的最终:highlight组的名称。id
:表示此项目的唯一数字 ID。ui_name
和hi_name
。它们可能不同,因为内置组已链接到另一个组:hi-link,或者因为使用了'winhighlight'。即使清除突出显示组,也会传输 UI 项目,因此ui_name
始终可以用于可靠地标识屏幕元素,即使没有应用任何属性也是如此。win
。该窗口应显示在另一个网格 anchor_grid
上,位于指定位置 anchor_row
和 anchor_col
。有关 anchor
的含义以及定位的更多详细信息,请参见 nvim_open_win()。如果窗口可以接收鼠标事件,则 mouse_enabled
为 true。win
。该窗口应显示为桌面环境中的独立顶级窗口,或类似的东西。grid
上显示消息。该网格将在默认网格(grid=1)上的 row
处显示,覆盖整个列宽。scrolled
指示消息区域是否已滚动以覆盖其他网格。在绘制分隔符时,它可能会有用 msgsep。内置 TUI 绘制一条用 sep_char
('fillchars' msgsep 字段)填充的完整行,以及 hl-MsgSeparator 突出显示。botline
设置为缓冲区行数加一。scroll_delta
包含自上次发出 win_viewport
以来窗口顶行移动的距离。它旨在用于实现平滑滚动。为此,它只计算“虚拟”或“显示”行,因此折叠只计算为一行。当滚动超过一整屏时,它是一个近似值。grid_line
)在一个批次中都会影响新的视口,尽管 win_viewport
是在更新之后接收的。例如,实现平滑滚动的应用程序应该考虑到这一点,并将网格与屏幕上显示的内容分开,并在接收到 win_viewport
后将其复制到视口目标。win_viewport
事件指示的视口的一部分。例如,在存在 'winbar' 和浮动窗口边框的情况下会发生这种情况。ui_watched
属性时才会发出。ext_popupmenu
ui-option 激活。items
是要显示的补全项的数组;每个项都是一个数组,形式为 [word, kind, menu, info],如 complete-items 中定义,只是如果存在,word
被替换为 abbr
。selected
是最初选择的项目,是项目数组中的一个以零为基点的索引(如果没有选择项目,则为 -1)。row
和 col
给出了锚点位置,完成的词的第一个字符将位于此处。当使用 ui-multigrid 时,grid
是锚点位置的网格。当 ext_cmdline
处于活动状态时,grid
设置为 -1,表示弹出菜单应锚定到外部 cmdline。然后 col
将是 cmdline 文本中的字节位置。selected
是来自最后一个 popupmenu_show 事件的项目数组中的一个以零为基点的索引,或者如果没有选择项目,则为 -1。ext_tabline
ui-option 激活。curbuf
+ buffers
是在 API7 中添加的。curtab:当前标签页 tabs:字典列表 [{ "tab": 标签页,"name": 字符串 }, ...] curbuf:当前缓冲区句柄。buffers:字典列表 [{ "buffer": 缓冲区句柄,"name": 字符串}, ...]ext_cmdline
ui-option 激活。content
是应在 cmdline 中显示的完整内容,pos
是 cmdline 中光标的位置。内容被分成具有不同突出显示属性的块,这些属性以字典的形式表示(参见 ui-event-highlight_set)。firstc
和 prompt
是文本,如果非空,应该显示在命令行前面。firstc
始终表示内置命令行,例如 :
(ex 命令)和 /
?
(搜索),而 prompt
是一个 input() 提示。indent
表示内容应该缩进多少个空格。<c-r>=
。level
字段用于区分同时处于活动状态的不同命令行。第一次调用的命令行级别为 1,下次递归调用的提示级别为 2。从 cmdline-window 调用 的命令行比编辑的命令行具有更高的级别。shift
为 true,则光标后的文本应移位,否则应覆盖光标处的字符。:function Foo()
: echo "foo"
:
lines
是突出显示块的行列表,形式与 "cmdline_show" 的 contents
参数相同。[attr_id, text_chunk]
元组的数组,构成具有不同突出显示的块的消息文本。块之间不应添加额外的空格,text_chunk
本身包含任何必要的空格。消息可以包含换行符 "\n"。msg_show
调用中替换消息,但任何其他可见消息应仍然保留。content
的格式与 "msg_show" 中的格式相同。此事件以空的 content
发送以隐藏最后一条消息。content
的格式与 "msg_show" 中的格式相同。此事件以空的 content
发送以隐藏最后一条消息。