符号
Nvim :help
页面,生成 自 源代码 使用 tree-sitter-vimdoc 解析器。
和 Bram Moolenaar
符号支持功能
当调试器或其他 IDE 工具驱动编辑器时,它需要能够提供特定的突出显示,以便用户快速了解有关文件的有用信息。一个例子是调试器,它在左侧栏中有一个图标,表示断点。另一个例子可能是代表程序计数器 (PC) 的箭头。符号功能允许在窗口左侧放置符号或图标,并定义将应用于该行的突出显示。将符号显示为图像很可能只在 gvim 中可行(虽然 Sun Microsystem 的 dtterm 支持这一点,但它是我知道的唯一支持此功能的终端仿真器)。文本符号和突出显示应该在任何彩色终端仿真器中可行。
符号和突出显示不仅对调试器有用。还有一些插件使用符号来标记构建错误或显示版本控制状态。
使用符号有两个步骤
1. 定义符号。这指定了图像、文本和突出显示。例如,您可以定义一个名为“break”的符号,它使用停止路标的图像和文本“!!”。
2. 放置符号。这指定了显示符号的文件和行号。已定义的符号可以在不同行和文件中放置多次。
该列的颜色由 SignColumn 突出显示组
hl-SignColumn 设置。设置颜色的示例
:highlight SignColumn guibg=darkgrey
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 {name}
{argument}
... 定义新符号或设置现有符号的属性。{name}
可以是数字(全部为数字)或以非数字字符开头的名称。前导零会被忽略,因此“0012”、“012”和“12”被视为相同的名称。可以定义大约 120 个不同的符号。
接受的参数
icon={bitmap} 定义包含位图的文件名。应该是完整的路径。位图应该适合两个字符的位置。这不会被检查。如果位图太大,会导致重绘问题。
工具包支持
Win32 .bmp、.ico、.cur
linehl={group} 用于放置符号的整行的突出显示组。最有用的是定义背景颜色。
text={text}
E239定义在没有图标或未使用 GUI 时显示的文本。只允许可打印字符,并且它们必须占据一个或两个显示单元。
texthl={group} 用于文本项目的突出显示组。
culhl={group} 当光标位于与符号相同的行上且
'cursorline' 已启用时,用于文本项目的突出显示组。
示例
:sign define MySign text=>> texthl=Search linehl=DiffText
:sign undefine {name}
删除之前定义的符号。如果使用此 {name}
的符号仍被放置,则会导致问题。
:sign list 列出所有已定义的符号及其属性。
:sign list {name}
列出一个已定义的符号及其属性。
: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
{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 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
{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}
中的标记。