我有这样的代码:
<start-1>
some stuff here
<start-2>
some stuff here
</start-2>
<start-3>
some stuff here
</start-3>
some stuff here
</start-1>我想把它涂成以下颜色:
<start-1>,</start-1>为粗体红色。<start-1>与</start-1>之间的含量为斜体红色。<start-2>,</start-2>为粗体绿色。<start-2>与</start-2>之间的含量为斜体绿色。<start-3>,</start-3>为粗体蓝色。<start-3>和</start-3>之间的含量为斜体蓝色。我试过:
syntax region start1 start=/<start-1>/ end=/<\/start-1>/ contains=t1,start2,start3
syntax region start2 start=/<start-2>/ end=/<\/start-2>/ contained contains=t2
syntax region start3 start=/<start-3>/ end=/<\/start-3>/ contained contains=t3
syntax match t1 /<\/\?start-1>/ contained
syntax match t2 /<\/\?start-2>/ contained
syntax match t3 /<\/\?start-3>/ contained
hi t1 ctermfg=red cterm=bold
hi t2 ctermfg=green cterm=bold
hi t3 ctermfg=blue cterm=bold
hi start1 ctermfg=red cterm=italic
hi start2 ctermfg=green cterm=italic
hi start3 ctermfg=blue cterm=italic但未能做到以下几点:

并不是所有的内容都被正确地着色(即绿色侵入了所有的蓝色空间,以及红色空间的其余部分),也不是所有的标签都是粗体。
如果删除标记t1、t2和t3,就会得到以下信息:

这表明所有的文本彩色化都是正确的。我猜这意味着,在某种程度上,标记匹配给region的边界设置带来了麻烦。
问题:
发布于 2019-07-24 07:39:43
以下仅供参考。最好的答案是在评论部分,由@昵称。
解决方案是按以下方式添加keepend:
syntax region start1 start=/<start-1>/ end=/<\/start-1>/ keepend contains=t1,start2,start3
syntax region start2 start=/<start-2>/ end=/<\/start-2>/ keepend contained contains=t2
syntax region start3 start=/<start-3>/ end=/<\/start-3>/ keepend contained contains=t3
syntax match t1 /<\/\?start-1>/ contained
syntax match t2 /<\/\?start-2>/ contained
syntax match t3 /<\/\?start-3>/ contained
hi t1 ctermfg=red cterm=bold
hi t2 ctermfg=green cterm=bold
hi t3 ctermfg=blue cterm=bold
hi start1 ctermfg=red cterm=italic
hi start2 ctermfg=green cterm=italic
hi start3 ctermfg=blue cterm=italic(sry不知道https://vi.stackexchange.com/的存在-版主可以随意重新定位,或者删除它-我只是贴出了答案,以防有帮助)。
https://stackoverflow.com/questions/57175201
复制相似问题