Syntax Vim语法修改

Syntax Vim语法修改,syntax,vim,vim-plugin,Syntax,Vim,Vim Plugin,我试图在vim-like彩虹括号中对不同级别的括号使用不同的颜色。但我不能不打破,例如,css高亮显示 问题在于:对于css文件,任何文本的语法都会用大括号括起来,非常合理地定义为“包含”,比如: 根据此定义,“aqua”关键字如果在大括号中,则会高亮显示,否则不会高亮显示 现在,当我为大括号定义区域时,如: syn region brace1 transparent contains=brace2 syn region brace2 transparent contained contains

我试图在vim-like彩虹括号中对不同级别的括号使用不同的颜色。但我不能不打破,例如,css高亮显示

问题在于:对于css文件,任何文本的语法都会用大括号括起来,非常合理地定义为“包含”,比如:

根据此定义,“aqua”关键字如果在大括号中,则会高亮显示,否则不会高亮显示

现在,当我为大括号定义区域时,如:

syn region brace1 transparent contains=brace2
syn region brace2 transparent contained contains=brace3
syn region brace3 transparent contained contains=brace1
为了使它们的颜色不同,我正在通过CSS定义打破cssColor的限制。这句话包含了所有显然不起作用的内容


所以问题是,是否可以编写代码来获取大括号的原始语法组包含的元素,并将它们添加到新定义的语法组中?我知道这对CSS文件来说并没有什么意义,但一般来说是这样的。

< P>当你集成到一个现有的(文件类型)语法时,你必须考虑它的结构;你不能只是把你的定义放在“最上面”,然后希望一切都能成功。当然,在编写诸如彩虹括号之类的通用插件功能时,这是很困难的

我认为您必须将各种“例外”和特殊情况合并到插件中,或者转到另一种可用于突出显示的机制,即
matchadd()
/
matchdelete()
函数。不幸的是,这里没有
:syn region
的自动嵌套功能,因此可能很难实现

syn region brace1 transparent contains=brace2
syn region brace2 transparent contained contains=brace3
syn region brace3 transparent contained contains=brace1