4

假设我有一个在 Vim 中打开的 LaTeX 文档,我想突出显示

{\color{red} ... }

(其中的点应该象征一些内容),也就是说,我想要{\color{red}}并且这些之间的所有内容都突出显示。我已经完成了

:syn region WarningMsg start=+{\\color{red}+ end=+}+

但是我有一个问题,如果我写了类似的东西{\color{red} some{thing} important},那么它只会{\color{red} some{thing}被突出显示,因为 Vim 当然会首先出现}. 如何制作此突出显示规则以使其跳过匹配的大括号?甚至多层次的这样。

4

1 回答 1

1

为清楚起见,最好为每个语法区域指定一个定制名称,然后将其链接到标准颜色组。我已重命名您的原始区域redTeX

您需要定义第二个区域 ,innerBrace定义要忽略的大括号,并将该区域标记为透明。然后redTeX应该被标记为包含透明区域,然后它将被忽略。

syn region innerBrace start=+{+ end=+}+ transparent contains=redTeX
syn region redTeX start=+{\\color{red}+ end=+}+ contains=innerBrace
hi link redTeX WarningMsg

请注意,在这种情况下,会增加redTeXinnerBrace. 我通过将其标记innerBrace为包含来解决此问题redTeX

希望这是有道理的!

于 2012-10-14T10:56:48.737 回答