【问题标题】:Syntax highlight start and end of transparent regions in Vim语法高亮 Vim 中透明区域的开始和结束
【发布时间】:2015-10-19 03:02:13
【问题描述】:

我正在用 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 区域并使其在文件的不相关部分上激活(在任何列表之外,从而破坏列表中不允许的元素的其他语法高亮。我认为问题在于未考虑结尾结束了,但一个大数组中的分隔符跨越到文件中的最后一个数组)。

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

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

【问题讨论】:

  • :help :syn-region 并检查 matchgroup= 定义。看看有没有帮助。
  • 谢谢,但正如我在倒数第二段中提到的那样,我试过了,不幸的是它不起作用。

标签: vim highlight delimiter vim-syntax-highlighting


【解决方案1】:

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

:hi myListContainer guifg=red

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

请看示例here

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 2019-04-05
    • 2019-06-01
    • 2020-04-08
    • 2015-12-17
    • 1970-01-01
    • 2012-08-16
    • 2014-11-14
    • 1970-01-01
    相关资源
    最近更新 更多