【问题标题】: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