Я пытаюсь заставить Vim синтаксически выделить любой файл, который заканчивается расширением .Rtex
, следующим образом:
- Весь текст верхнего уровня выделен как TeX
- Исключение: любой текст, заключенный в
\begin{python}...\end{python}
, выделяется как Python
Я могу выполнить каждый из этих критериев индивидуально, но не могу достичь обоих одновременно. Я думаю, что каким-то образом подсветка TeX переопределяет мои области, выделенные Python, или препятствует их действию, и я застрял, пытаясь понять, как это сделать.
Первый шаг: изменить .vimrc
, чтобы получить файлы с расширением .Rtex
тип файла rtex
:
au BufRead *.Rtex setf rtex
Второй шаг: создать ~/.vim/syntax/rtex.vim
. Именно содержимое этого файла будет определять способ выделения .Rtex
файлов.
Третий шаг: включить общую подсветку TeX верхнего уровня, сделав rtex.vim
похожим на это:
runtime! syntax/tex.vim
Если я сейчас открою файл .Rtex
, весь файл будет выделен как TeX, включая любой текст в \begin{python}...\end{python}
, как и ожидалось.
Четвертый шаг: следуйте инструкциям Vim's :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!
, я делаю получаю подсветку python, в пределах областей \begin{python}...\end{python}
, точно так, как нужно, но, конечно, нет Выделение TeX в оставшейся части документа. Поэтому я прихожу к выводу, что подсветка TeX как-то ответственна за предотвращение влияния областей python.
Может ли Мастер Вима предложить мне какие-нибудь предложения? Я в настоящее время в тупике. Я просмотрел несколько страниц и вопросов о стекопереработке, которые кажутся актуальными, но пока ни один из них не привел к решению: