ubiquitous the pagina online oficial commands comandos vim latex vim-syntax-highlighting lstlisting

pagina - vim the ubiquitous text editor



Resaltado de sintaxis Vim con $ y lstlisting''s lstinline (7)

¡Finalmente resolvamos este problema de una vez por todas!

Le tex.vim correo a Charles E. Campbell, el mantenedor de tex.vim , sugiriéndole que agregara reglas de resaltado para el paquete de listados. Sin embargo, resulta que la falta de soporte para el paquete de listados en tex.vim es realmente intencional. El razonamiento se puede encontrar :h tex-package . En resumen, se supone que debes crear tus propias reglas de resaltado de sintaxis extendida (ver la parte inferior de la publicación):

Tex: ¿Quieres resaltar más comandos?

LaTeX es un lenguaje programable, por lo que hay miles de paquetes llenos de comandos, sintaxis y fuentes especializadas de LaTeX. Si está utilizando un paquete de este tipo, a menudo deseará que la sintaxis distribuida / tex.vim lo respalde. Sin embargo, claramente esto no es práctico. Entonces, considere usar las técnicas en mysyntaxfile-add para ampliar o modificar el resaltado proporcionado por syntax / tex.vim. Considere la posibilidad de cargar cualquier extensión que escriba, que normalmente iría en $ HOME / after / syntax / tex / [pkgname] .vim, a http://vim.sf.net/ .

Personalmente, creo que es un poco desafortunado que no se vaya a incluir, ya que seguramente aumenta el umbral para que el usuario promedio escriba LaTeX de él o ella con Vim. Encontrar y agregar resaltado de sintaxis para lstlisting , lstinline , etc. no es demasiado fácil. No parece que vaya a cambiar en un futuro cercano tampoco al mirar this hilo.

Parece que DevSolar ya lo encontró (¡y aprecio el crédito!), Pero Campbell ofrece un par de vimballs de soporte de paquetes LaTeX de ejemplo . El primero, lstlisting.vba.gz , incluye reglas de resaltado para lstlisting y lstinputlisting . Sin embargo, carece de lstinline , de lo que trata este tema.

Finalmente, aquí están mis listings.vim VIM residía en $HOME/.vim/after/syntax/tex/

syn region texZone start="//begin{lstlisting}" end="//end{lstlisting}/|%stopzone/>" syn region texZone start="//lstinputlisting" end="{/s*[a-zA-Z/.0-9_^]/+/s*}" syn match texInputFile "//lstinline/s*/(/[.*/]/)/={./{-}}" contains=texStatement,texInputCurlies,texInputFileOpt

-

Esta parece ser la solución preferida. No requiere que uno altere los archivos de todo el sistema en /usr/share/vim/.. , no tiene que descargar y generar un vimball o alterar entornos en lugar de corregir la sintaxis resaltándose. Podría considerar lanzar esto como un simple complemento para hacerlo más accesible.

Por último, recuerde comprobar que en realidad está ejecutando el tipo de archivo tex y no plaintex que le falta demasiado para ser viable. Ya publiqué esto en un comentario anterior, pero se puede encontrar más información en un boleto que agregué a LaTeX-Box .

Si utilizo la versión en línea de lstlisting como se muestra:

/lstinline{!$omp parallel for}

el resaltado de sintaxis en vim sale mal, y el resto del archivo de látex está coloreado de rojo como si todo fuera parte de la lista de códigos. Es el dólar $ que causa el problema. ¿Cómo puedo evitar esto?


El problema inicial me pareció que el resto del archivo de tex se muestra con un resaltado de sintaxis desordenado. Así que tal vez la solución fácil y práctica podría ser utilizar un

%stopzone

después de la lstlisting-Region.


En el enlace publicado por timss en la respuesta del usuario1174052, encontré la página Vim del Dr. Chip , que proporciona el complemento lstlisting.vba.gz lstlisting.vba.gz. Descarga, abre en Vim ...

vim lstlisting.vba.gz

... ejecuta el vimball ...

:so %

... y la próxima vez que abra un archivo LaTeX, el resaltado de sintaxis ignorará completamente el contenido de los lstlisting de lstlisting de lstlisting .

El crédito es para el usuario timss, que publicó el enlace al boleto de LaTeX-Box, donde también publicó el enlace a la página del Dr. Chip. Agregué esta respuesta simplemente como un atajo de "enlace directo".


Esto funciona para mí:

/lstinline[mathescape]{!$/$$omp parallel for}

Por lo que entiendo, escribe el símbolo del dólar en modo matemático, pero no pude ver ninguna diferencia visible.


Esto no es realmente un error, es por diseño. Para resaltar esto correctamente, Vim tendría que analizar e interpretar todo el documento TeX hasta el punto donde se produce este código, ya que TeX es un lenguaje sensible al contexto. Esto es demasiado complejo y requiere mucho tiempo para un complemento de resaltado de sintaxis.

La única solución aceptable sería volver a escribir el resaltador de sintaxis desde cero, utilizando una implementación completa de TeX que emita metainformación para cada token en el código fuente. Este es un gran proyecto. Por lo que sé, ninguna implementación de TeX actualmente disponible proporciona dicha información, lo que significa que uno realmente tendría que escribir esto uno mismo.


No tengo este problema. Estoy ejecutando Vim 7.3.46 con filetype = tex. (El valor predeterminado de Mine es "plaintex" en los archivos .tex; es posible que desee verificar el tipo de archivo con: set ft?)


Tuve un problema similar con la inserción de comandos R para knitr en archivos de tex. Tenía muchos $ y otros caracteres especiales dentro de /rinline{} . Y lo arreglé para que Vim ignore el texto dentro de este comando.

Desea editar el archivo tex.vim, en mi distribución es sudo vim /usr/share/vim/vim73/syntax/tex.vim

A ca. línea línea 228:

syn match texInputFile "///(epsfig/|input/|usepackage/)/s*/(/[.*/]/)/={./{-}}" contains=texStatement,texInputCurlies,texInputFileOpt

Cambiar a:

syn match texInputFile "///(epsfig/|input/|usepackage/|rinline/)/s*/(/[.*/]/)/={./{-}}" contains=texStatement,texInputCurlies,texInputFileOpt

... o para lstinline :

syn match texInputFile "///(epsfig/|input/|usepackage/|lstinline/)/s*/(/[.*/]/)/={./{-}}" contains=texStatement,texInputCurlies,texInputFileOpt