如何在VIM语法高亮显示中,在已匹配的区域内用粗体标记文本



给定如下内容:

这是\f随机文本\b和更多\f*,然后还有更多。

  • 我想把头发染成灰色
  • 我希望"标签"为粗体(因此它们是灰色的,但也变为粗体)

我不能确定优先顺序,所以加粗和着色都会出现。

syn match footnoteEnd /\f*/
syn match footnoteStart /\f/
syn match footnoteBTag /\f/
syn region footnoteInfo start=/\f/ end=/\f*/
hi def footnoteInfo guifg=grey
hi def footnoteStart gui=bold
hi def footnoteBTag gui=bold
hi def footnoteEnd gui=bold

任何帮助都将不胜感激。

你可以试试这个:

syn match footnoteDelimiter /\f*?/ contained
syn match footnoteBTag /\b/ contained
syn region footnoteInfo start=/\f/ end=/\f*/ contains=footnoteDelimiter,footnoteBTag keepend
hi def footnoteInfo guifg=grey
hi def footnoteBTag gui=bold guifg=grey
hi def footnoteDelimiter gui=bold guifg=grey

说明:

  • 当Vim到达区域的末尾时,它在footnoteEnd之前再次匹配footnoteStart,然后*从不变粗。这就是为什么我建议使用footnoteDelimiter

  • contained参数被添加到footnoteDelimiterfootnoteBTag中,因为它们出现在一个区域中。

  • contains=footnoteDelimiter,footnoteBTag指定允许哪些语法组进入该区域。

  • CCD_ 9使得外部区域的结束模式的匹配也结束任何包含的项目。

最新更新