我为以下文件提供了自定义vim语法高亮显示:
--- Start foo
++ Block
...
--
++ Another block
--
--- Stop foo
--- Start bar
++ Unclosed block
--- Stop bar
Something outside
--- Start
和--- Stop
之间的所有内容都是可折叠的区域,++
和--
之间的所有内容都是另一个可折叠区域。问题是最后一个区域(++ Unclosed block
)没有关闭线,因此在该区域内识别(和折叠)文件末尾的所有内容,结果为Something outside
,这应该是在任何区域之外并折叠,而是用二级折叠包围。
我可以在文件结尾之前定义要求结束匹配的区域吗?
答案 0 :(得分:0)
注意:启动区域的决定仅基于匹配的开始 图案。没有检查匹配的结束模式。
所以有一种可能性就是把这个地区变成一场比赛:
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