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

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

Visual explanation of the problem

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

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

最佳答案

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

:hi myListContainer guifg=red

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

请看例子here .

关于vim - 语法在 Vim 中突出显示透明区域的开始和结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31678299/

相关文章:

c++ - 保存 .cpp 文件时在 vim 中自动格式化代码

Vim 命令注释掉选定的行?

vim - 我怎样才能让 vim yank to clipboard ("*y) 工作?

javascript - 在鼠标悬停时突出显示文本行

Java - 将输入文件中的数字存储在二维数组中

java - 知道为什么这个扫描仪接下来无法读取吗

vim - 在gvim中设置默认字体

javascript - CSS-当id链接到使用 anchor 时突出显示div?

sorting - 如何按字母顺序对逗号分隔的单元格 Google 表格进行排序?

ios - 如何创建一个按钮,突出显示散点图中的下一个点? ios