Я пытаюсь заставить Vim синтаксис выделить любой файл, который заканчивается расширением .Rtex
следующим образом:
- Весь текст верхнего уровня выделяется как TeX
- Исключение: любой текст, заключенный в
\begin{python}...\end{python}
, выделяется как Python
Я могу выполнить каждый из этих критериев индивидуально, но не могу достичь одновременно. Я думаю, что как-то подсветка TeX переопределяет области, выделенные Python, или препятствует их вступлению в силу, и я застреваю, пытаясь понять, как это сделать.
Первый шаг: изменить .vimrc
, чтобы предоставить файлы с расширением .Rtex
filetype 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 :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}" [email protected]
Команда unlet! b:current_syntax
предназначена для принудительного выполнения файла синтаксиса python.vim
, даже если существующий синтаксис (TeX) уже активен.
Проблема: Если я теперь открою файл .Rtex
, весь файл по-прежнему будет выделен только как TeX. Область \begin{python}...\end{python}
, по-видимому, не имеет эффекта.
Эксперимент:. Если я удалю или закомментирую команду runtime!
, я получаю выделение python в пределах областей \begin{python}...\end{python}
точно так, как вам нужно, но, конечно же, подсветка TeX в остальном документа. Поэтому я пришел к выводу, что подсветка TeX как-то ответственна за предотвращение влияния областей python.
Может ли Мастер Vim предложить мне какие-нибудь предложения? Сейчас я в тупике. Я рассмотрел несколько страниц и вопросы, связанные с stackoverflow, которые кажутся релевантными, но ни один из них до сих пор не привел к решению: