vim “gq}” comando para redigir parágrafo, e LaTeX

5

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 rodar "gq}" com o cursor no primeiro item (primeira letra de this ), ele produzirá esta saída:

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

Isso é o que eu quero:

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

Se eu puder de alguma forma conseguir que o vim reconheça que o token \item significa o fim de um parágrafo, estou pensando que ele funcionará corretamente. Como eu iria fazer isso, embora?

    
por orryowr 09.05.2012 / 02:41

2 respostas

6

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 .

    
por 09.05.2012 / 03:41
0

Aqui está a solução que funciona para mim. Eu escrevi um script externo para lidar com a formatação de texto em látex ( link )

Exemplo de uso no vim:

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

Com as opções padrão, ele tratará seu exemplo se você selecionar o texto no ambiente itemize. Para que funcione quando você selecionar mais texto, será necessário ativar a opção format_inside_group no início do script.

    
por 04.02.2014 / 18:16

Tags