我正在为Vim中的一种语言(还没有一种语言)编写语法高亮文件。
我所坚持的类似问题是突出显示Python中的列表:我希望列表中的元素能够正常突出显示,假设它们是语言允许在这样的列表中的类型,而列表的结构(即[ , ]
应以自己的颜色突出显示。
目前我使用
syn region myList start='\[' end=']' transparent contains=myList,myDelimiter,myNumber,myString
syn match myDelimiter ',' contained
myList
包含自身以允许嵌套列表(因此合法的额外]
结束标记)而不会破坏该区域。但是,由于它是透明的(允许突出显示其他法律小组(在此示例中为myNumber
和myString
)),[
开头和]
结束括号仍然没有突出显示
myDelimiter
组可以被视为至少突出显示逗号的解决方法(尽管没有结构的其余部分,即开始[
和结束]
),它是毫无意义的。将[
和]
添加到myDelimiter
模式中,如下所示:
syn match myDelimiter ',\|\[\|]' contained
打破myList
区域并使其在文件的不相关部分上激活(在任何列表之外,从而打破列表中不允许的元素的其他语法高亮。我认为问题是结束不是' t再次考虑结束,但是大数组中的分隔符跨越文件中的最后一个数组。)
我尝试将matchgroup=myList
添加到syn region myList ...
(并确保它在我的colorscheme中有相应的hi myList ctermfg=red
条目),但它没有改变任何内容。
有没有办法解决这个问题?
答案 0 :(得分:2)
您需要将matchgroup=myListContainer
添加到您的区域定义中,之后您可以突出显示此新组:
:hi myListContainer guifg=red
您可以使用matchgroup
任何其他群组名称,但我认为它不应与您要链接的主要群组相同。
请查看示例here。