【发布时间】:2014-12-12 16:00:02
【问题描述】:
我正在自定义 tex.vim 语法文件以使 LaTeX 宏 \PVerb 以与 \verb 相同的方式突出显示。我在语法文件中模仿了\verb 的行,添加了以下行:
syn region texZone start="\\PVerb{" end="}\|%stopzone\>"
也就是说,我想突出显示从 \PVerb{ 到与其匹配的 } 的文本区域。
但是,如果\PVerb{...}里面有{},那么封闭的}就会过早匹配,例如,
\PVerb{{text1}...{text2}}
...{text2} 部分不会被高亮显示,因为它前面有 }。
那么在这些情况下如何绕过},这不是正确的匹配大括号?
我已经尝试过this question 中提出的建议,但无法让它发挥作用突出显示的区域超出了匹配的}。
这是我尝试过的(按照@Ingo Karkat 的建议添加了innerBrace):
syn region innerBrace start=+{+ end=+}+ transparent contains=texZone,innerBrace
syn region texZone start="\\PVerb{" end="}\|%stopzone\>" contains=innerBrace
这就是我得到的:
您可以看到第 3 行的正常文本也逐字突出显示。
如果我删除syn region texZone 中的contains=innerBrace,得到的结果如下:
【问题讨论】:
-
这对我有用。如果你使用
syn region innerBrace start=+{+ end=+}+ transparent contains=texZone,innerBrace,它甚至会处理嵌套的{ ... { ... -
@IngoKarkat 您好,感谢您的建议。我已经编辑了我的描述。问题是突出显示的区域超出了匹配的
}。从我的截图中可以看出。 -
感谢您的补充;我现在看到了问题。
标签: vim latex syntax-highlighting