我正在尝试为我使用的一些自定义格式补丁新的vim语法文件。大部分我都可以理解,但是关键字"contains"让我头疼。
这里有没有人能够以一种向树解释的方式给我解释它的作用(我已经读了帮助->还是没完全明白)。
我正在尝试为我使用的一些自定义格式补丁新的vim语法文件。大部分我都可以理解,但是关键字"contains"让我头疼。
这里有没有人能够以一种向树解释的方式给我解释它的作用(我已经读了帮助->还是没完全明白)。
一般而言,在同一位置只能有一种语法高亮方法。因此,以类C语法为例,如果您定义一个区域从左大括号'{'开始到右大括号'}'结束,该区域的语法高亮将保持相同。
contains=
可以让您配置其他语法高亮组包含在外部组中。按照之前的示例,您可能希望即使在外部区域中也可以突出显示int
。那么您可以像下面这样做:
syn keyword Keyword int
syn region BraceBlock start='{' end='}' contains=Keyword
需要随后添加包含关键词列表中的项目是非常常见的。有几种方法可以实现这一点。首先,您可以使用contains=ALL
或contains=ALLBUT,Error
来允许任何内容在区域内。其次,您可以使用containedin
将某些内容推入另一个区域的包含范围:
syn region BraceBlock start='{' end='}'
syn keyword Keyword int containedin=BraceBlock
第三,您可以将“包含”的任何内容视为此组中有效的内容:
syn region BraceBlock start='{' end='}' contains=CONTAINED
syn keyword Keyword int contained
最后,你可以使用集群,这使得决定哪些内容放在哪里变得非常容易:
syn region BraceBlock start='{' end='}' contains=@MyCluster
syn keyword Keyword int
syn cluster MyCluster contains=Keyword
syn keyword Conditional if else
syn cluster MyCluster add=Conditional
" Now conditionals and keywords can appear in a BraceBlock
如果不知道你想要了解什么,我不确定还有什么可以说的 - 你想要实现什么,遇到了什么问题?
contained
的用法。在第三个点上,syn region BraceBlock start='{' end='}' contains=CONTAINED
和它下面的那行。 - Harshiv