【问题标题】:Vim Syntax Highlighting AfterVim 语法高亮之后
【发布时间】:2026-01-24 17:15:02
【问题描述】:

我有一种类型的文本文件,其中包含一堆以井号 (#) 开头的关键字。示例:

#foobar
    #fizz bizz

我想调整 vim 语法文件以仅突出显示关键字后的单词;在这个例子中,它会很有趣。

【问题讨论】:

    标签: vim syntax


    【解决方案1】:

    即使您不想突出显示关键字本身(您的意见可能稍后会改变),将两者解析为单独的语法组会更容易,因为 Vim 的语法突出显示是针对文档的完整解析量身定制的。

    因此,定义关键字和单词的语法组,并指定它们之间的关系:

    syntax match myKeywords "#\w\+\>" skipwhite nextgroup=myKeywords,myWords
    syntax match myWords "\<\w\+\>" contained skipwhite nextgroup=myKeywords,myWords
    

    (模式将您稀缺的描述作为输入;根据您的需要进行调整。)要突出显示这些词,您可以将 myWords 链接到现有的突出显示组(推荐),或者定义您的自己的属性:

    highlight link myWords Statement
    

    myKeywords 已解析,但未突出显示,因为没有 :highlight 命令。

    完整语法脚本的路径

    如果有需要“调整”的(第三方)语法脚本,最好将这些扩展单独保存在 after 目录中(例如~/.vim/after/syntax/&lt;filetype&gt;.vim)。此外,根据现有的语法组,如果现有的语法组已经匹配(可以使用containedin=... 修复),可能会出现额外的复杂情况。

    如果这是新语法,最好写一个对应的文件类型检测;在语法脚本中,将 my 前缀替换为所选的文件类型名称。您可以在:help 44.11 找到有关语法脚本的更多信息。

    【讨论】:

      【解决方案2】:

      突出显示#fizz之后的文本:

      syntax match HashWord /\v(#fizz>)@<=.*/hs=s+1
      highlight HashWord ctermbg=60
      

      这将创建一个语法组 HashWord,它与模式 \v(#fizz&gt;)@&lt;=.* 匹配。 h在模式的 start (s+1) 之后突出显示 start (hs) 一个字符。

      可以使用ctermbgctermfg 更改背景和前景突出显示颜色。对于 GUI vim,请改用 guibgguifg

      【讨论】: