语法突出显示Vim中透明区域的开始和结束

我正在为Vim中的一种语言(它还没有一种语言)编写语法高亮文件.

我所坚持的一个类似问题是突出显示Python中的列表:我希望列表中的元素正常突出显示,假设它们是语言允许在这样的列表中的类型,而列表的结构(即[ ,]应该以自己的颜色突出显示.

目前我用

syn region myList      start='\[' end=']' transparent contains=myList,myDelimiter,myNumber,myString
syn match  myDelimiter ','                contained

myList包含自身以允许嵌套列表(因此合法的额外结束标记)而不会破坏该区域.但是,由于它是透明的(允许突出显示其他合法组(在此示例中为myNumber和myString)),[start和]结束括号保持不突出显示.

myDelimiter组可以被认为是一种解决方法,至少突出显示逗号(尽管没有结构的其余部分,即开始[和结束]),它是相当无意义的.将[和]添加到myDelimiter模式,如下所示:

syn match  myDelimiter ',\|\[\|]'         contained

打破myList区域并使其在文件的不相关部分上激活(在任何列表之外,从而打破列表中不允许的元素的其他语法高亮.我认为问题是结束不再被视为结束,但是大数组中的分隔符,跨越文件中的最后一个数组).

我尝试将matchgroup = myList添加到syn region myList …(并确保它在我的colorscheme中有相应的hi myList ctermfg = red条目),但它没有改变任何内容.

有没有办法来解决这个问题?

最佳答案 您需要将matchgroup = myListContainer添加到您的区域定义中,之后您可以突出显示这个新组:

:hi myListContainer guifg=red

您可以将您的matchgroup用于任何其他组名,但我认为它不应与您要链接的主要组相同.

请查看示例here.

点赞