说我在Vim打开了一个LaTeX文档,我想突出显示每一个
{\color{red} ... }
(这些点应该用来表示某些内容),也就是说,我想要{\color{red}
,}
,并突出显示这些内容之间的所有内容。我已经完成了
:syn region WarningMsg start=+{\\color{red}+ end=+}+
但我遇到的问题是,如果我写的是{\color{red} some{thing} important}
之类的内容,那么只有{\color{red} some{thing}
才会突出显示,因为Vim当然会计算}
的第一次出现。如何制作此突出显示规则以便跳过匹配的大括号?甚至是多层次的。
答案 0 :(得分: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
请注意,在这种情况下,redTeX
本身与innerBrace
匹配的附加细微之处。我通过将innerBrace
标记为包含redTeX
来解决此问题。
希望有意义!