Vim 中透明区域的语法高亮开始和结束

Jør*_*gen 5 vim highlight delimiter vim-syntax-highlighting

我正在 Vim 中为一种语言(还没有)编写语法突出显示文件。

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

目前我使用

syn region myList      start='\[' end=']' transparent contains=myList,myDelimiter,myNumber,myString
syn match  myDelimiter ','                contained
Run Code Online (Sandbox Code Playgroud)

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

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

syn match  myDelimiter ',\|\[\|]'         contained
Run Code Online (Sandbox Code Playgroud)

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

问题的可视化解释

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

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

exc*_*noe 3

您需要添加matchgroup=myListContainer到区域定义中,然后您可以突出显示这个新组:

:hi myListContainer guifg=red
Run Code Online (Sandbox Code Playgroud)

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

请看一下这里的例子。