comando vim "gq}" para reorganizar o parágrafo e LaTeX

comando vim "gq}" para reorganizar o parágrafo e LaTeX

Como posso fazer com que este comando não envolva coisas como \item?

Por exemplo:

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

se eu executar "gq}" com o cursor no primeiro item (primeira letra de this), produzirá esta saída:

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

É isso que eu quero:

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

Se eu conseguir de alguma forma fazer com que o vim reconheça que o token \itemsignifica o final de um parágrafo, acho que funcionará corretamente. Como eu faria isso?

Responder1

Acho que você pode fazer isso com a opção 'formatlistpat' definida para incluir as tags delimitadoras de parágrafo. Você precisa incluir 'n' em 'formatoptions' para que isso funcione. Ver

:help 'formatlistpat'
:help 'formatoptions'

Por exemplo, com

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

formatar seu exemplo produz isto:

\begin{enumerar}
\item este pode ser um parágrafo longo
     que abrange várias linhas
\item blá
\end{enumerar}

Observe que a segunda linha do primeiro item é recuada pelo comprimento da \itemtag, portanto não é exatamente o que você queria, mas pode estar próximo o suficiente. Você também pode experimentar \zeconforme mencionado na ajuda para ver se consegue fazer com que o Vim reconheça a tag sem recuar as linhas subsequentes. Eu não tentei isso.

Atualizar

O 'formatlistpat' é um pouco mais claro e mais fácil de editar, se for definido usando :letem vez de :set.

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

A l:parte especifica que é uma configuração local de buffer.

Atualizar

Para reduzir o recuo para 1 caractere, faça o seguinte:

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

Observe que se houver algum espaço em branco antes de \item, o recuo se tornará aquele número + 1. Não sei se é possível reduzir o recuo para 0 usando o \ze.

Responder2

Aqui está uma solução que funciona para mim. Eu escrevi um script externo para lidar com a formatação de texto em látex (https://github.com/elmanuelito/par-latex)

Exemplo de uso no vim:

  • Selecione algum texto (por exemplo, Vjou ggVG)
  • digite ":!par-latex" (a linha de comando do vim se parece com '<,'>!par-latex:)
  • digite entrar

Com opções padrão, ele tratará seu exemplo se você selecionar o texto no ambiente itemize. Para que funcione ao selecionar mais texto, você precisará ativar a opção format_inside_groupno início do script.

informação relacionada