如何找出当前字符的“语法组”?

Lau*_*ves 1 vim

有时在使用 vim 时,我想知道为什么语法突出显示会以某种方式为某些文本着色。我希望能够将光标放在此文本上并输入一些命令以找出它所属的语法组。

例如,我注意到gitcommit缓冲区中第一行的前 50 个字符(即:git commit 消息)以奇怪的颜色突出显示。我想知道这些字符使用了什么语法组,以便我可以调整我的(自定义)配色方案。

Lau*_*ves 5

以下命令将输出语法组的名称和光标所在字符的翻译语法组:

:let s = synID(line('.'), col('.'), 1) | echo synIDattr(s, 'name') . ' -> ' . synIDattr(synIDtrans(s), 'name')
Run Code Online (Sandbox Code Playgroud)

为了更方便,它可以包含在自定义命令、函数或键绑定中。

这是如何工作的:

  • line('.')col('.')返回当前位置
  • synID(...) 返回一个数字语法 ID
  • synIDtrans(s)s通过以下突出显示链接进行翻译
  • synIDattr(s, 'name') 返回与数字语法 ID 对应的名称

这将输出如下内容:

gitcommitSummary -> Statement
Run Code Online (Sandbox Code Playgroud)