Acho que você pode fazer isso com a opção 'formatlistpat' configurada para incluir as tags delimitadoras de parágrafo. Você precisa incluir 'n' em 'formações' para que isso funcione. Veja
:help 'formatlistpat'
:help 'formatoptions'
Por exemplo, com
:set formatlistpat=^\s*\\\(end\\|item\)\>
:set formatoptions+=n
:set textwidth=40
formatar o seu exemplo produz isto:
\begin{enumerate} \item this might be a long paragraph that spans multiple lines \item blah \end{enumerate}
Observe que a segunda linha do primeiro item é recuada pelo comprimento da tag \item
, por isso não é exatamente o que você queria, mas pode estar perto o suficiente. Você também pode experimentar com \ze
, como mencionado na ajuda, para ver se você pode fazer com que o Vim reconheça a tag sem recuar as linhas subseqüentes. 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 parte l:
especifica que é uma configuração local do 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 do \item
, o recuo se tornará esse número + 1. Não sei se é possível reduzir o recuo até 0 usando o \ze
.