Comando vim "gq}" para volver a ajustar el párrafo y LaTeX

Comando vim "gq}" para volver a ajustar el párrafo y LaTeX

¿Cómo puedo hacer que este comando no ajuste cosas como \item?

Por ejemplo:

\begin{enumerate}
\item this might be a long paragraph that spans multiple lines 
\item blah
\end{enumerate}

si ejecuto "gq}" con el cursor en el primer elemento (primera letra de this), produce este resultado:

\begin{enumerate}
\item this might be a long 
paragraph that spans multiple 
lines \item blah \end{enumerate}

Esto es lo que quiero:

\begin{enumerate}
\item this might be a long 
paragraph that spans multiple 
lines 
\item blah
\end{enumerate}

Si de alguna manera puedo hacer que vim reconozca que el token \itemsignifica el final de un párrafo, creo que funcionará correctamente. ¿Cómo haría eso?

Respuesta1

Creo que puedes hacer esto con la opción 'formatlistpat' configurada para incluir las etiquetas que delimitan párrafos. Debes incluir 'n' en 'formatoptions' para que eso funcione. Ver

:help 'formatlistpat'
:help 'formatoptions'

Por ejemplo, con

:set formatlistpat=^\\s*\\\\\\(end\\\\|item\\)\\>
:set formatoptions+=n
:set textwidth=40

formatear su ejemplo produce esto:

\begin{enumerar}
\item este podría ser un párrafo largo
     que abarca varias líneas
\item bla
\end{enumerar}

Tenga en cuenta que la segunda línea del primer elemento tiene una sangría según la longitud de la \itemetiqueta, por lo que no es exactamente lo que deseaba, pero podría estar lo suficientemente cerca. También puedes experimentar \zecomo se menciona en la ayuda para ver si puedes hacer que Vim reconozca la etiqueta sin sangrar las líneas siguientes. No intenté eso.

Actualizar

El 'formatlistpat' es un poco más claro y más fácil de editar si se configura usando :leten lugar de :set.

:let &l:flp = '^\s*\\\(end\|item\)\>'

La l:parte especifica que es una configuración local del búfer.

Actualizar

Para reducir la sangría a 1 carácter, haga esto:

:let &l:flp = '^\s*\\\ze\(end\|item\)\>'

Tenga en cuenta que si hay espacios en blanco antes de \item, entonces la sangría se convierte en ese número + 1. No sé si es posible reducir la sangría a 0 usando \ze.

Respuesta2

Aquí hay una solución que funciona para mí. Escribí un script externo para manejar el formato del texto látex (https://github.com/elmanuelito/par-latex)

Ejemplo de uso en vim:

  • Seleccione algún texto (por ejemplo, Vjo ggVG)
  • escriba ":!par-latex" (la línea de comandos de vim se ve así '<,'>!par-latex:)
  • escriba entrar

Con las opciones predeterminadas, manejará su ejemplo si selecciona el texto dentro del entorno detallado. Para que funcione cuando selecciones más texto, necesitarás activar la opción format_inside_groupal principio del script.

información relacionada