Encontre e altere certa codificação LaTeX no vim, usando expressões regulares?

1

Como posso alterar a seguinte codificação LaTeX:

\cite{1,3-7,9} 

para

\cite{1,3,4,5,6,7,9}  

no vim? Eu preferiria usar expressões regulares.

    
por sam 24.08.2014 / 15:50

4 respostas

3

Você pode usar o comando substitute do vim para fazer isso:

:%s/\cite{1,3-7,9}/\cite{1,3,4,5,6,7,9}/g  

Isso substituirá todas as ocorrências de \cite{1,3-7,9} por \cite{1,3,4,5,6,7,9} .

Para substituir apenas as ocorrências existentes na linha atual, você pode usar:

:s/\cite{1,3-7,9}/\cite{1,3,4,5,6,7,9}/g 

Anexe o c se você quiser que o vim solicite uma confirmação antes de alterar qualquer linha. Por exemplo:

:%s/\cite{1,3-7,9}/\cite{1,3,4,5,6,7,9}/gc  
    
por 24.08.2014 / 19:43
2

Para expandir qualquer instância única de um intervalo do formulário m-n dentro de uma expressão \cite{...} , talvez você possa fazer algo como

 perl -pe 's/\cite{(?:\d+,)*\K(\d+)-(\d+)(?=(?:,\d+)*})/sprintf "%s", join(",", ($1..$2))/e' file.tex
    
por 25.08.2014 / 00:33
1

Com o meu plug-in PatternsOnText , você pode restringir os comandos :substitute a correspondências de padrões ( \cite{...} no seu caso):

:%SubstituteInSearch/\cite{[^}]\+}/\(\d\+\)-\(\d\+\)/\=join(range(submatch(1),submatch(2)), ',')/g

A expressão regular analisa os números inicial e final e os transforma no intervalo de números via join() e range() , usando :help sub-replace-expr .

    
por 25.08.2014 / 13:22
0

Muitas vezes, o vim vem com o Perl vinculado.

A possibilidade de usar perl (ou similar) no Vim, pode ser relevante.

Quando você tem +perl , pode usar a solução :perldo + @steeldriver (na verdade, uma pequena variação):

:perldo s/\cite{(?:\d+,)*\K(\d+)-(\d+)(?=(,.*?)?})/sprintf "%s",join(",", $1..$2)/e
    
por 05.03.2015 / 09:56