【问题标题】: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 参数已添加到 footnoteDelimiterfootnoteBTag,因为它们出现在一个区域中。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-22
      • 2013-09-06
      • 1970-01-01
      • 2016-08-16
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多