我试图让vim语法高亮显示以扩展名.Rtex结尾的任何文件,方法如下:
所有顶层文本都突出显示为tex
异常:\begin{python}...\end{python}中包含的任何文本都将突出显示为python
我能够单独实现这些标准中的每一个,但不能同时实现这两个标准。我认为不知何故,tex高亮显示会覆盖我的python高亮显示的区域,或者阻止它们生效,我一直在努力想办法解决这个问题。
第一步:编辑.vimrc以提供扩展名为.Rtex的文件类型rtex

  au BufRead *.Rtex setf rtex

第二步:创建~/.vim/syntax/rtex.vim。此文件的内容将决定如何突出显示.Rtex文件。
第三步:通过使rtex.vim如下所示,启用一般顶层tex突出显示:
runtime! syntax/tex.vim

如果我现在打开一个.Rtex文件,整个文件将突出显示为tex,包括\begin{python}...\end{python}中的任何文本,如预期的那样。
第四步:按照vim的:help syn-include中的说明包括python highlighting,并将其应用于由\begin{python}\end{python}分隔的所有区域。我的rtex.vim文件现在看起来如下:
runtime! syntax/tex.vim
unlet! b:current_syntax
syntax include @Python syntax/python.vim
syntax region pythonCode start="\\begin{python}" end="\\end{python}" contains=@Python

unlet! b:current_syntax命令旨在强制执行python.vim语法文件,即使现有语法(tex)已处于活动状态。
问题:如果我现在打开一个.Rtex文件,整个文件仍然以tex突出显示。\begin{python}...\end{python}区域似乎没有效果。
实验:如果我删除或注释掉runtime!命令,我确实会在\begin{python}...\end{python}区域中得到python高亮显示,完全符合需要,但是在文档的其余部分中当然没有tex高亮显示。因此,我得出的结论是,tex突出显示在某种程度上负责防止python区域生效。
维姆大师能给我提些建议吗?我现在被难住了。我看了几页和StackOverflow问题,这些问题似乎很相关,但到目前为止还没有一个解决方案:
http://vim.wikia.com/wiki/Different_syntax_highlighting_within_regions_of_a_file
Embedded syntax highligting in Vim
VIM syntax highlighting of html nested in yaml

最佳答案

经过对手册的进一步研究,以及更多的尝试和错误,我终于回答了我自己的问题(同时也是一个令人尴尬和崇高的成就),现在我把它保存在这里留给子孙后代。
基本上,我认为问题在于python高亮显示不会生效,因为pythonCode区域本身包含在由tex.vim定义的区域或高亮组中,所以它不是顶级的。解决方案是也给它取一个类似于include的名称,然后将runtime添加到我的python区域定义中。所以现在看起来像这样:

let b:current_syntax = ''
unlet b:current_syntax
runtime! syntax/tex.vim

let b:current_syntax = ''
unlet b:current_syntax
syntax include @TeX syntax/tex.vim

let b:current_syntax = ''
unlet b:current_syntax
syntax include @Python syntax/python.vim
syntax region pythonCode matchgroup=Snip start="\\begin{python}" end="\\end{python}" containedin=@TeX contains=@Python

hi link Snip SpecialComment
let b:current_syntax = 'rtex'

这是可行的!我不确定是否所有这些tex.vim命令都是严格必要的。我还给python区域分隔符一个matchgroup(@TeX),这样它们就可以自己突出显示(使用containedin=@TeX颜色),而不是只留下普通的,这显然是默认情况下发生的,因为它们不再被视为tex的一部分。
现在,为不同的语言(例如,syntax/rtex.vim)添加更多的突出显示区域是一件微不足道的事情,如果你正在学习识字编程——这是我提出问题的最初动机——那就太好了。
编辑:下面是一个屏幕截图,显示它如何处理嵌入在Tex文档中的python和r代码:

关于python - 无法使用Vim的syn-include和syn-region来嵌入语法高亮显示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5176972/

10-12 17:10
查看更多