Vim语法文件...试图理解“包含”

时间:2009-11-30 10:30:17

标签: vim

我正在尝试为我正在使用的某些自定义格式修补新的vim语法文件。其中大部分我都能理解,但关键词“包含”给我带来了麻烦。

这里是否有人可以给我一个解释它的作用(我已经阅读了帮助 - >并没有完全得到它),好像他正在向树上解释它一样。

1 个答案:

答案 0 :(得分:26)

通常,您只能在一个位置使用一种语法突出显示方法。因此,要使用类C语法作为示例,如果您定义一个区域以在左括号'{'上开始并在结束括号'}'上结束,则该区域的语法突出显示将是相同的。

contains=允许您配置要包含在外部组中的其他语法突出显示组。要遵循前面的示例,即使它位于外部区域,您也可能希望int突出显示。然后你可以有类似的东西:

syn keyword Keyword int
syn region BraceBlock start='{' end='}' contains=Keyword

以后需要在包含的关键字列表中添加项目是很常见的。有几种方法可以做到这一点。首先,您可以使用contains=ALLcontains=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

如果不确切地知道你想要了解什么,我不知道还有什么可说的 - 你想要实现什么以及是什么导致了你的问题?