如何在 VIM 语法突出显示中将已匹配区域内的文本标记为粗体?
How do I mark text bold inside an already matched region in VIM syntax highlighting?
给出类似的东西:
This is \f random text \b and more \f* and then some more.
- 我想把 \f 补到 \f* 变灰
- 我想要 "tags" 加粗(所以它们是灰色的,但也会变成粗体)
我无法确定优先级,所以加粗和着色都出现了。
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
参数已添加到 footnoteDelimiter
和 footnoteBTag
,因为它们出现在一个区域中。
contains=footnoteDelimiter,footnoteBTag
指定允许哪些语法组进入该区域。
keepend
使外部区域的结束模式的匹配也结束任何包含的项目。
给出类似的东西:
This is \f random text \b and more \f* and then some more.
- 我想把 \f 补到 \f* 变灰
- 我想要 "tags" 加粗(所以它们是灰色的,但也会变成粗体)
我无法确定优先级,所以加粗和着色都出现了。
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
参数已添加到footnoteDelimiter
和footnoteBTag
,因为它们出现在一个区域中。contains=footnoteDelimiter,footnoteBTag
指定允许哪些语法组进入该区域。keepend
使外部区域的结束模式的匹配也结束任何包含的项目。