【问题标题】:How to avoid unclosed regions in vim syntax highlight?如何避免 vim 语法高亮中的未闭合区域?
【发布时间】:2015-12-17 04:29:54
【问题描述】:

我有自定义的 vim 语法高亮显示如下文件:

--- Start foo

++ Block
...
--

++ Another block
--

--- Stop foo

--- Start bar

++ Unclosed block
--- Stop bar

Something outside

--- Start--- Stop 之间的所有内容都是可折叠区域,++-- 之间的所有内容都是另一个可折叠区域。问题是最后一个区域 (++ Unclosed block) 没有结束行,因此到文件末尾的所有内容都在该区域内被识别(并折叠),结果 Something outside 应该在任何区域之外而 fold,则改为包含在二级折叠中。

我可以在文件结尾之前定义需要结束匹配的区域吗?

【问题讨论】:

    标签: vim vim-syntax-highlighting


    【解决方案1】:

    根据vim documentation

    注意:开始区域的决定仅基于匹配的开始 图案。不检查匹配的结束模式。

    所以一种可能性是将区域变成匹配:

    syntax match InnerBlock "^++ \_.\{-}\n--$" fold contains=InnerBlock
    

    但这使它慢得多。另一种选择是让 InnerBlock 也停在--- Stop,因此至少Something outside 线保持在折叠之外。注意 keepend 必须添加到 OuterBlock 定义中:

    syntax region OuterBlock
          \ start="^--- Start .*$"
          \ end="^--- Stop .*$"
          \ fold
          \ contains=InnerBlock
          \ keepend
    
    syn region InnerBlock
          \ start="^++ .*$"
          \ end="^--$"
          \ end="^--- Stop .*$"
          \ fold
          \ contains=InnerBlock
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-08
      • 2015-10-19
      • 2012-08-16
      • 2019-04-05
      • 1970-01-01
      • 2014-11-14
      • 2017-07-30
      • 2011-01-19
      相关资源
      最近更新 更多