在vim中突出显示的LaTeX部分

时间:2011-09-10 19:11:10

标签: vim latex syntax-highlighting tex

在LaTeX中,部分如下:

\section{Section Title}

我想强调这些部分或章节标题。我试着将以下内容放在~/.vim/bundle/latexrc/after/syntax/tex.vim

syn match texSectioning "\\section\>" skipwhite nextgroup=texSectioningTitle
syn region texSectioningTitle       contained matchgroup=Delimiter start='{'    end='}' contains=@texSectioningGroup
syn cluster texSectioningGroup      contains=texMatcher,texComment,texDelimiter

(请注意,这种语法不是由默认的tex.vim语法文件处理的。它只定义了“区域区域”,这对我来说几乎毫无价值。)

然后我在我的配色方案中定义了以下内容:

hi texSectioning gui=bold guifg=red

没有任何反应;也就是说,在我的LaTeX代码中,部分标题不会显示为红色(即使我完全重新加载文件后)。

我对vim的语法如何工作以及如何调试它感到很困惑。

修改 更多信息:它有时有效,有时无效。 完全无法预测。可能是什么问题呢?病原?别的什么?我完全不解。

3 个答案:

答案 0 :(得分:0)

您已定义新的语法项texSectioningtexSectioningTitletexSectioningGroup,但您尚未将它们与突出显示组相关联,因此Vim不知道如何显示它们。尝试添加以下行:

hi def link texSectioning Statement
hi def link texSectioningTitle String
hi def link texSectioningGroup Comment

StatementStringComment色彩由您使用的colourscheme定义。这些只是示例:您可以使用colourscheme文件中定义的任何组替换它们。

答案 1 :(得分:0)

答案如下:tex.vim在区域中划分文本,其中语法必须显式允许。关键要素是命令:

syn cluster texChapterGroup contains=@texSectioningGroup

这表示要在texChapterGroup内修改,允许语法群集texSectioningGroup。接下来要做的就是像往常一样定义该集群。

另一个细节是,区域texSectioningTitle必须是contained,否则它将匹配LaTeX中的任意{}对。

所以完整的解决方案是这样的:

syn match texSectioningCommand '\\section\>' skipwhite     nextgroup=texSectioningTitle contains=@texSectioningGroup
syn region texSectioningTitle        start='{'  end='}' contained
syn cluster texSectioningGroup contains=texSectioningCommand
syn cluster texChapterGroup contains=@texSectioningGroup

编辑以下是行为显然不可预测的原因:vim不会读取整个文件以找出语法。因此,在一个足够大的章节中,我的部分语法将起作用,因为vim远远不足以看到它在章节区域中。

答案 2 :(得分:0)

只需更新信息即可轻松突出显示部分。使用containsin意味着所有其他语法匹配都包含此新语法匹配。然后只需定义所需的颜色。

syn match texSectioningCommand '\\section\>' containedin=ALLBUT,texComment
hi texSectioningCommand guifg=#ec5f67 ctermfg=203

或者,可以将简单的新语法匹配添加到texFoldGroup,以便在块文档内进行评估。

syn match texSectioningCommand '\\section\>'
syn cluster texFoldGroup add=texSectioningCommand
hi texSectioningCommand guifg=#ec5f67 ctermfg=203