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

时间:2015-07-28 13:51:22

标签: vim highlight delimiter vim-syntax-highlighting

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

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

目前我使用

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

myList包含自身以允许嵌套列表(因此合法的额外]结束标记)而不会破坏该区域。但是,由于它是透明的(允许突出显示其他法律小组(在此示例中为myNumbermyString)),[开头和]结束括号仍然没有突出显示

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

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

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

Visual explanation of the problem

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

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

1 个答案:

答案 0 :(得分:2)

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

:hi myListContainer guifg=red

您可以使用matchgroup任何其他群组名称,但我认为它不应与您要链接的主要群组相同。

请查看示例here