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

时间:2016-05-03 01:00:09

标签: vim

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

这是如何运作的:

  • line('.')col('.')返回当前位置
  • synID(...)返回数字语法ID
  • synIDtrans(s)按照突出显示的链接
  • 翻译s
  • synIDattr(s, 'name')返回与数字语法ID
  • 对应的名称

这将输出如下内容:

gitcommitSummary -> Statement