我试图在类似vim的彩虹括号中对不同级别的括号进行着色。但是我不能不破坏,例如,css突出显示。
问题在于:任何文本的语法都会转换为css文件的大括号,非常合理地定义为“包含”,如:
syn keyword cssColor contained aqua
syn region cssDefinition transparent start='{' end='}' contains=cssColor
根据这个定义,如果“aqua”关键字在括号中,则会突出显示,但不会突出显示。
现在,当我为大括号定义区域时:
syn region brace1 transparent contains=brace2
syn region brace2 transparent contained contains=brace3
syn region brace3 transparent contained contains=brace1
能够以不同的方式对它们进行着色,我正在通过cssDefinition打破对cssColor的控制。说包含ALL显然不起作用。
所以问题是,是否可以编写代码来获取大括号的原始语法组所包含的元素,并将它们添加到新定义的语法组中?我知道这对css文件没有任何意义,但它确实如此。
答案 0 :(得分:1)
当您集成到现有(filetype-)语法时,您必须考虑其结构;你不能只把你的定义“放在首位”,希望一切顺利。当然,在编写像 rainbow括号这样的常规插件功能时,这很难。
我认为您必须将各种“例外”和特殊情况合并到您的插件中,或转移到可用于突出显示的其他机制matchadd()
/ matchdelete()
函数。不幸的是,您没有:syn region
的自动嵌套功能,因此可能很难实现。