vimrc python vim latex syntax-highlighting tex

vimrc - vim python syntax



Problemas para usar syn-include y syn-region de Vim para incrustar resaltado de sintaxis (2)

Después de estudiar más el manual y mucho más de prueba y error, finalmente he respondido a mi propia pregunta (un logro embarazoso y sublime al mismo tiempo), que ahora guardo aquí para la posteridad.

Básicamente, creo que el problema es que el resaltado python no pythonCode efecto porque la región pythonCode estaba en sí misma en una región o grupo resaltado definido por tex.vim , por lo que no era de nivel superior. La solución es include también (en lugar de solo runtime ) tex.vim , dándole un nombre como @TeX , y luego agregar @TeX containedin=@TeX a la definición de mi región python. Entonces la syntax/rtex.vim ahora se ve así:

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''

Y esto funciona! No estoy seguro de si todos los unlet b:current_syntax son estrictamente necesarios. También le di a los delimitadores de la región python un grupo de coincidencias (Snip) para que se puedan resaltar ellos mismos (con el color SpecialComment ), en lugar de SpecialComment simplemente, que aparentemente es lo que sucede de manera predeterminada, ya que ya no se los considera parte del TeX .

Ahora es una cosa trivial agregar más regiones destacadas para diferentes idiomas (p. Ej., /begin{Scode}.../end{Scode} ), lo cual es genial si está /begin{Scode}.../end{Scode} en la programación alfabetizada, la motivación original para mi pregunta.

Editar: aquí hay una captura de pantalla que muestra cómo funciona con Python y el código R integrado en un documento TeX:

Estoy intentando que Vim sintaxis resalte cualquier archivo que termine con la extensión .Rtex de la siguiente manera:

  • Todo el texto de nivel superior se resalta como TeX
  • Excepción: cualquier texto incluido en /begin{python}.../end{python} se resalta como Python

Puedo lograr cada uno de estos criterios individualmente, pero no puedo lograr ambos simultáneamente. Creo que de alguna manera el resaltado TeX anula mis regiones resaltadas en Python, o evita que entren en vigencia, y estoy atascado tratando de descubrir cómo.

Primer paso: edite .vimrc para dar a los archivos con extensión .Rtex el tipo de archivo rtex :

au BufRead *.Rtex setf rtex

Segundo paso: crear ~/.vim/syntax/rtex.vim . Es el contenido de este archivo el que determinará cómo resaltar los archivos .Rtex .

Tercer paso: habilite el resaltado TeX de nivel superior general, haciendo que rtex.vim vea así:

runtime! syntax/tex.vim

Si ahora abro un archivo .Rtex , el archivo completo se resalta como TeX, incluido cualquier texto dentro de /begin{python}.../end{python} , como se esperaba.

Cuarto paso: siga las instrucciones en Vim''s :help syn-include para incluir el resaltado python y aplicarlo a todas las regiones delimitadas por /begin{python} y /end{python} . Mi archivo rtex.vim ahora se ve así:

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

¡El unlet! b:current_syntax unlet! b:current_syntax comando unlet! b:current_syntax está destinado a obligar al archivo de sintaxis python.vim a ejecutarse aunque ya exista una sintaxis (TeX) existente.

Problema: si ahora abro un archivo .Rtex , el archivo completo aún se resalta solo como TeX. La región /begin{python}.../end{python} parece no tener ningún efecto.

Experimento: ¡ Si elimino o comento el runtime! comando, obtengo el resaltado de python, dentro de las regiones /begin{python}.../end{python} , exactamente como se desee, pero por supuesto no se resalta TeX en el resto del documento. Por lo tanto, concluyo que el resaltado TeX es de alguna manera responsable de evitar que las regiones de python entren en vigencia.

¿Puede un Maestro de Vim ofrecerme alguna sugerencia? Actualmente estoy perplejo. He examinado varias páginas y preguntas de stackoverflow que parecen relevantes, pero ninguna de ellas hasta ahora ha llevado a una solución:


No sé si me sirve, pero un truco que uso con mis archivos Rnw que usan las funciones tex y rnoweb es el siguiente:

au BufEnter *.Rnw set filetype=tex | set filetype=rnoweb

¿Funcionaría una versión adaptada en su caso?