如何避免vim语法中的未闭合区域突出显示?

时间:2015-09-20 11:28:09

标签: vim vim-syntax-highlighting

我为以下文件提供了自定义vim语法高亮显示:

--- Start foo

++ Block
...
--

++ Another block
--

--- Stop foo

--- Start bar

++ Unclosed block
--- Stop bar

Something outside

--- Start--- Stop之间的所有内容都是可折叠的区域,++--之间的所有内容都是另一个可折叠区域。问题是最后一个区域(++ Unclosed block)没有关闭线,因此在该区域内识别(和折叠)文件末尾的所有内容,结果为Something outside,这应该是在任何区域之外并折叠,而是用二级折叠包围。

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

1 个答案:

答案 0 :(得分:0)

根据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
相关问题