符号

Nvim :help 页面,生成源代码 使用 tree-sitter-vimdoc 解析器。


和 Bram Moolenaar
符号支持功能

1. 简介 sign-intro signs

当调试器或其他 IDE 工具驱动编辑器时,它需要能够提供特定的突出显示,以便用户快速了解有关文件的有用信息。一个例子是调试器,它在左侧栏中有一个图标,表示断点。另一个例子可能是代表程序计数器 (PC) 的箭头。符号功能允许在窗口左侧放置符号或图标,并定义将应用于该行的突出显示。将符号显示为图像很可能只在 gvim 中可行(虽然 Sun Microsystem 的 dtterm 支持这一点,但它是我知道的唯一支持此功能的终端仿真器)。文本符号和突出显示应该在任何彩色终端仿真器中可行。
符号和突出显示不仅对调试器有用。还有一些插件使用符号来标记构建错误或显示版本控制状态。
使用符号有两个步骤
1. 定义符号。这指定了图像、文本和突出显示。例如,您可以定义一个名为“break”的符号,它使用停止路标的图像和文本“!!”。
2. 放置符号。这指定了显示符号的文件和行号。已定义的符号可以在不同行和文件中放置多次。
sign-column
当为文件定义符号时,Vim 会自动添加两字符宽的列来显示它们。当最后一个符号被取消放置时,该列也会消失。可以使用 'signcolumn' 选项更改此行为。
该列的颜色由 SignColumn 突出显示组 hl-SignColumn 设置。设置颜色的示例
:highlight SignColumn guibg=darkgrey
如果 'cursorline' 已启用,则使用 CursorLineSign 突出显示组 hl-CursorLineSignsign-identifier
每个放置的符号都由一个称为符号标识符的数字标识。此标识符用于跳转到符号或删除符号。标识符在使用 :sign-place 命令或 sign_place() 函数放置符号时分配。每个符号标识符都应该是唯一的数字(每个缓冲区)。放置相同的标识符两次将移动之前放置的符号。可以使用零符号标识符调用 sign_place() 函数以分配下一个可用标识符。
sign-group
每个放置的符号都可以分配给全局组或命名组。放置符号时,如果没有提供组名或使用空字符串,则符号将被放置在全局组中。否则,符号将被放置在命名组中。符号标识符在一个组内是唯一的。符号组允许 Vim 插件使用唯一的符号,而不会干扰其他使用符号的插件。
sign-priority
每个放置的符号都分配一个优先级值,独立于符号组。符号的默认优先级为 10,此值可以在定义时通过指定不同的值来更改不同的符号。当在同一行上放置多个具有图标或文本的符号时,符号将按优先级递减的顺序从左到右排列,直到达到在 'signcolumn' 中设置的最大宽度。不适合的低优先级符号将被隐藏。具有突出显示属性的最高优先级符号始终显示。
当放置符号的行被删除时,符号将随之一起删除。
以下是一个在当前文件的第 23 行放置名为“piet”的符号的示例,它将显示文本“>>”
:sign define piet text=>> texthl=Search
:exe ":sign place 2 line=23 name=piet file=" .. expand("%:p")
以下是如何再次删除该命令的命令
:sign unplace 2
请注意,“:sign”命令后面不能再接其他命令或注释。如果需要,请使用 :execute 命令。
定义符号。 :sign-define E255 E160 E612
有关等效的 Vim 脚本函数,请参阅 sign_define()
:sign define {name} {argument}... 定义新符号或设置现有符号的属性。{name} 可以是数字(全部为数字)或以非数字字符开头的名称。前导零会被忽略,因此“0012”、“012”和“12”被视为相同的名称。可以定义大约 120 个不同的符号。
接受的参数
icon={bitmap} 定义包含位图的文件名。应该是完整的路径。位图应该适合两个字符的位置。这不会被检查。如果位图太大,会导致重绘问题。
工具包支持
Win32 .bmp、.ico、.cur
priority={prio} 符号的默认优先级,请参阅 sign-priority
linehl={group} 用于放置符号的整行的突出显示组。最有用的是定义背景颜色。
numhl={group} 用于放置符号行的行号的突出显示组。覆盖 hl-LineNrhl-LineNrAbovehl-LineNrBelowhl-CursorLineNr
text={text} E239
定义在没有图标或未使用 GUI 时显示的文本。只允许可打印字符,并且它们必须占据一个或两个显示单元。
texthl={group} 用于文本项目的突出显示组。
culhl={group} 当光标位于与符号相同的行上且 'cursorline' 已启用时,用于文本项目的突出显示组。
示例
:sign define MySign text=>> texthl=Search linehl=DiffText
删除符号 :sign-undefine E155
有关等效的 Vim 脚本函数,请参阅 sign_undefine()
:sign undefine {name} 删除之前定义的符号。如果使用此 {name} 的符号仍被放置,则会导致问题。
示例
:sign undefine MySign

列出符号 :sign-list E156

有关等效的 Vim 脚本函数,请参阅 sign_getdefined()
:sign list 列出所有已定义的符号及其属性。
:sign list {name} 列出一个已定义的符号及其属性。

放置符号 :sign-place E158

有关等效的 Vim 脚本函数,请参阅 sign_place()
:sign place {id} line={lnum} name={name} file={fname} 将定义为 {name} 的符号放置在文件 {fname} 的第 {lnum} 行。 :sign-fname
文件 {fname} 必须已加载到缓冲区中。必须使用确切的文件名,通配符、$ENV 和 ~ 不会被扩展,空格不得转义。尾随空格会被忽略。
该符号将在 {id} 下记住,可用于进一步操作。{id} 必须是数字。多次放置相同的 {id} 将移动该符号。
以下可选的符号属性可以在“file=”之前指定:group={group} 将符号放置在符号组 {group} 中 priority={prio} 为符号分配优先级 {prio}
默认情况下,符号将被放置在全局符号组中。
默认情况下,符号将分配默认优先级 10,除非符号定义中另有指定。要分配不同的优先级值,请使用“priority={prio}”指定一个值。优先级用于确定在同一行上放置多个符号时显示的符号。
示例
:sign place 5 line=3 name=sign1 file=a.py
:sign place 6 group=g2 line=2 name=sign2 file=x.py
:sign place 9 group=g2 priority=50 line=5
                                \ name=sign1 file=a.py
:sign place {id} line={lnum} name={name} [buffer={nr}] 相同,但使用缓冲区 {nr}。如果未给出缓冲区参数,则在当前缓冲区中放置符号。
示例
:sign place 10 line=99 name=sign3
:sign place 10 line=99 name=sign3 buffer=3
E885
:sign place {id} name={name} file={fname} 将文件 {fname} 中放置的符号 {id} 更改为使用定义的符号 {name}。请参阅上面关于 {fname} 的说明 :sign-fname。这可用于更改显示的符号而无需移动它(例如,当调试器已停止在断点处时)。
可选的“group={group}”属性可以在“file=”之前使用,用于选择特定组中的符号。可选的“priority={prio}”属性可用于更改现有符号的优先级。
示例
:sign place 23 name=sign1 file=/path/to/edit.py
:sign place {id} name={name} [buffer={nr}] 相同,但使用缓冲区 {nr}。如果未给出缓冲区参数,则使用当前缓冲区。
示例
:sign place 23 name=sign1
:sign place 23 name=sign1 buffer=7

删除符号 :sign-unplace E159

有关等效的 Vim 脚本函数,请参阅 sign_unplace()
:sign unplace {id} file={fname} 从文件 {fname} 中删除之前放置的符号 {id}。请参阅上面关于 {fname} 的说明 :sign-fname
:sign unplace {id} group={group} file={fname} 相同,但删除符号组 {group} 中的符号 {id}
:sign unplace {id} group=* file={fname} 相同,但从所有符号组中删除符号 {id}
:sign unplace * file={fname} 删除文件 {fname} 中所有放置的符号。
:sign unplace * group={group} file={fname} 从文件 {fname} 的符号组 {group} 中删除所有放置的符号。
:sign unplace * group=* file={fname} 从所有组中删除文件 {fname} 中所有放置的符号。
:sign unplace {id} buffer={nr} 从缓冲区 {nr} 中删除之前放置的符号 {id}
:sign unplace {id} group={group} buffer={nr} 从缓冲区 {nr} 的符号组 {group} 中删除之前放置的符号 {id}
:sign unplace {id} group=* buffer={nr} 从缓冲区 {nr} 的所有组中删除之前放置的符号 {id}
:sign unplace * buffer={nr} 删除缓冲区 {nr} 中所有放置的符号。
:sign unplace * group={group} buffer={nr} 从缓冲区 {nr} 的符号组 {group} 中删除所有放置的符号。
:sign unplace * group=* buffer={nr} 从缓冲区 {nr} 的所有组中删除所有放置的符号。
:sign unplace {id} 从它出现的所有文件中删除之前放置的符号 {id}
:sign unplace {id} group={group} 从它出现的所有文件中删除符号组 {group} 中之前放置的符号 {id}
:sign unplace {id} group=* 从所有包含该标记的所有文件中删除之前放置的标记 {id}
:sign unplace * 从所有文件中删除全局组中所有已放置的标记。
:sign unplace * group={group} 从所有文件中删除组 {group} 中所有已放置的标记。
:sign unplace * group=* 从所有文件中删除所有组中所有已放置的标记。
:sign unplace 删除光标位置处已放置的标记。如果该行中放置了多个标记,则只删除一个。
:sign unplace group={group} 删除光标位置处组 {group} 中已放置的标记。
:sign unplace group=* 删除光标位置处任何组中已放置的标记。

列出已放置的标记 :sign-place-list

参见 sign_getplaced() 获取等效的 Vim 脚本函数。
:sign place file={fname} 列出放置在文件 {fname} 中的标记。有关 {fname} 的说明,请参见上面的 :sign-fname
:sign place group={group} file={fname} 列出放置在文件 {fname} 中的组 {group} 中的标记。
:sign place group=* file={fname} 列出放置在文件 {fname} 中的所有组中的标记。
:sign place buffer={nr} 列出放置在缓冲区 {nr} 中的标记。
:sign place group={group} buffer={nr} 列出放置在缓冲区 {nr} 中的组 {group} 中的标记。
:sign place group=* buffer={nr} 列出放置在缓冲区 {nr} 中的所有组中的标记。
:sign place 列出所有文件中全局组中已放置的标记。
:sign place group={group} 列出所有文件中具有标记组 {group} 的已放置标记。
:sign place group=* 列出所有文件中所有标记组中的已放置标记。
跳转到标记 :sign-jump E157
参见 sign_jump() 获取等效的 Vim 脚本函数。
:sign jump {id} file={fname} 打开文件 {fname} 或跳转到包含 {fname} 的窗口,并将光标定位在标记 {id} 处。有关 {fname} 的说明,请参见上面的 :sign-fname。如果文件未在窗口中显示,并且当前文件无法被 放弃,则操作失败。
:sign jump {id} group={group} file={fname} 相同,但跳转到组 {group} 中的标记。
:sign jump {id} [buffer={nr}] E934
相同,但使用缓冲区 {nr}。如果缓冲区 {nr} 没有名称,则操作失败。如果未给出缓冲区参数,则使用当前缓冲区。
:sign jump {id} group={group} [buffer={nr}] 相同,但跳转到组 {group} 中的标记。
命令索引
快速参考