Vim语法修改

时间:2013-03-14 04:44:20

标签: syntax vim vim-plugin

我试图在类似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文件没有任何意义,但它确实如此。

1 个答案:

答案 0 :(得分:1)

当您集成到现有(filetype-)语法时,您必须考虑其结构;你不能只把你的定义“放在首位”,希望一切顺利。当然,在编写像 rainbow括号这样的常规插件功能时,这很难。

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