【问题标题】:How do I mark text bold inside an already matched region in VIM syntax highlighting?如何在 VIM 语法高亮显示已匹配区域内将文本标记为粗体?
【发布时间】:2016-08-14 03:29:20
【问题描述】:
鉴于类似:
这是 \f 随机文本 \b 和更多 \f* 以及更多。
- 我想把 \f 变成 \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
任何帮助将不胜感激。
【问题讨论】:
标签:
vim
syntax-highlighting
vim-syntax-highlighting
【解决方案1】:
你可以试试这个:
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 参数已添加到 footnoteDelimiter 和 footnoteBTag,因为它们出现在一个区域中。
contains=footnoteDelimiter,footnoteBTag 指定允许哪些语法组进入该区域。
keepend 使外部区域的结束模式的匹配也结束任何包含的项目。