Vim数学语法高亮

时间:2012-11-28 17:48:07

标签: vim markdown vim-syntax-highlighting multimarkdown

我正在尝试改进markdown文档中数学的语法高亮。

Multimarkdown使用括号\\[ .. \\]\\( .. \\)分别表示显示和内联数学。我想用TeX突出显示这些内容。

这是我到目前为止所得到的:

syntax include @tex syntax/tex.vim
syn region displaymaths matchgroup=mkdMaths start = "\\\\\[" end="\\\\\]" contains=@tex
syn region inlinemaths matchgroup=mkdMaths start = "\\\\(" end="\\\\)" contains=@tex
hi def link mkdMaths SpecialComment

问题是括号内的内容不会被tex.vim选为数学,因为它没有包含在$ .. $中。有没有办法解决这个问题?我认为这是我想在这里使用的syntax / tex.vim中的texMath组。

有什么方法可以强制括号的内容被解释为Tex数学?

2 个答案:

答案 0 :(得分:2)

:syntax include @tex syntax/tex.vim为您提供了一个@tex语法群集,可在包含Tex的区域中使用,但您实际上想要引用tex.vim中存在的特定群集@texMathZoneGroup

由于没有语法群集的嵌套,您可以通过contains=@texMathZoneGroup直接引用它。

答案 1 :(得分:0)

syntax include syntax/tex.vim
syn region displaymaths matchgroup=mkdMaths start = "\\\\\[" end="\\\\\]" contains=@texMathZoneGroup
syn region inlinemaths matchgroup=mkdMaths start = "\\\\(" end="\\\\)" contains=@texMathZoneGroup
hi def link mkdMaths SpecialComment

vim文档(:help syn-include)实际上非常清楚地说明了这一点(虽然也许可以用一个例子):

  

如果包含语法文件中的顶级语法项     包含在包含语法的区域内,可以使用     “:语法包含”命令:

n:sy[ntax] include [@{grouplist-name}] {file-name}

如果要从包含的语法文件中包含特定的顶级语法项'foo',则需要在contains=@foo命令中包含syn region

  

包含文件中声明的所有语法项都将具有     添加了“包含”标志。此外,如果指定了组列表,     将添加包含文件中的所有顶级语法项     那份清单。

因此,我的问题中的@tex grouplist-name不需要指定。如果我在我的文档中有更大的TeX区域,则需要指定,因为它允许访问包含的语法文件的命名空间,这样contains=@tex将根据所有规则突出显示整个区域。包含的语法文件。