gpt4 book ai didi

python - 使用 Vim 的 syn-include 和 syn-region 嵌入语法高亮时出现问题

转载 作者:太空狗 更新时间:2023-10-29 17:45:07 29 4
gpt4 key购买 nike

我试图让 Vim 以语法高亮任何以扩展名 .Rtex 结尾的文件,方法如下:

  • 所有顶级文本都突出显示为 TeX
  • 异常(exception):包含在 \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高亮,并将其应用到所有由\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 高亮显示{python}...\end{python} 区域,完全按照需要,但当然在文档的其余部分没有 TeX 突出显示。因此,我得出结论,TeX 突出显示在某种程度上是导致 python 区域生效的原因。

Vim 高手可以给我一些建议吗?我现在很困惑。我已经查看了几个看似相关的页面和 stackoverflow 问题,但到目前为止都没有找到解决方案:

最佳答案

在对手册进行更多研究并进行更多试验和错误之后,我终于回答了我自己的问题(既令人尴尬又崇高的成就),我现在将其保存在这里以供后代使用。

基本上,我认为问题在于 python 突出显示不会生效,因为 pythonCode 区域本身包含在 tex.vim 定义的区域或突出显示组中>,所以它不是顶级的。解决方案也是 include(而不仅仅是 runtime)tex.vim,给它起一个像 @TeX 这样的名字>,然后将 containedin=@TeX 添加到我的 python 区域定义中。所以 syntax/rtex.vim 现在看起来像这样:

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'

这有效!我不确定是否所有这些 unlet b:current_syntax 命令都是绝对必要的。我还为 python 区域定界符提供了一个匹配组 (Snip),这样它们就可以自己突出显示(使用 SpecialComment 颜色),而不是简单地保留下来,这显然是什么默认情况下会发生,因为它们不再被视为 TeX 的一部分。

现在为不同的语言添加更多高亮区域是一件微不足道的事情(例如,\begin{Scode}...\end{Scode}),如果你得到进入文学编程——我提出这个问题的最初动机。

编辑:这里是一个屏幕截图,展示了它如何使用嵌入在 TeX 文档中的 Python 和 R 代码: Screenshot: Python and R embedded in TeX

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com