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 \item
significa 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 \item
tag, portanto não é exatamente o que você queria, mas pode estar próximo o suficiente. Você também pode experimentar \ze
conforme 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 :let
em 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,
Vj
ouggVG
) - 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_group
no início do script.