我为如下所示的文件提供了自定义vim语法突出显示:
--- Start foo
++ Block
...
--
++ Another block
--
--- Stop foo
--- Start bar
++ Unclosed block
--- Stop bar
Something outside--- Start和--- Stop之间的一切都是可折叠区域,++和--之间的一切都是另一个可折叠区域。问题是,最后一个区域(++ Unclosed block)没有结束线,因此直到文件末尾的所有内容都在这个区域内被识别(和折叠),结果是应该在任何区域和文件夹之外的Something outside被包含在第二级文件夹中。
我可以定义在文件结束之前要求结束匹配的区域吗?
发布于 2015-09-21 15:36:42
根据vim documentation的说法
注意:启动区域的决定仅基于匹配的启动模式。不会检查是否存在匹配的结束模式。
因此,一种可能性是将区域转换为匹配:
syntax match InnerBlock "^++ \_.\{-}\n--$" fold contains=InnerBlock但这会使它变得更慢。另一种选择是让InnerBlock也停在--- Stop上,这样至少Something outside行就会留在folds之外。注意:必须在OuterBlock定义中添加keepend:
syntax region OuterBlock
\ start="^--- Start .*$"
\ end="^--- Stop .*$"
\ fold
\ contains=InnerBlock
\ keepend
syn region InnerBlock
\ start="^++ .*$"
\ end="^--$"
\ end="^--- Stop .*$"
\ fold
\ contains=InnerBlockhttps://stackoverflow.com/questions/32678860
复制相似问题