在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的语法如何工作以及如何调试它感到很困惑。
修改 更多信息:它有时有效,有时无效。 完全无法预测。可能是什么问题呢?病原?别的什么?我完全不解。
答案 0 :(得分:0)
您已定义新的语法项texSectioning
,texSectioningTitle
和texSectioningGroup
,但您尚未将它们与突出显示组相关联,因此Vim不知道如何显示它们。尝试添加以下行:
hi def link texSectioning Statement
hi def link texSectioningTitle String
hi def link texSectioningGroup Comment
Statement
,String
和Comment
色彩由您使用的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