vim: substitua cadeias de comprimento variável

3

O arquivo a ser editado é do tipo markdown, que tem várias seções decoradas por uma string de - , como:

Section 1
---------

Another Section
---------------

Gostaria de alterar todos os - para = . Existe uma boa abordagem no vim para fazer isso? Suponha que todas as strings de seção possam ser identificadas como -\+$ no vim, mas com comprimento variável. Eu procurei, mas não encontrei uma boa solução até agora.

Obrigado.

    
por Gang Liang 25.01.2017 / 02:40

2 respostas

3

Bem, primeiro, sinto-me obrigado a mencionar que existe um site dedicado às perguntas do vim ...

Dito isto, há algumas maneiras diferentes de conseguir isso. Uma maneira seria usar o "registro de avaliação" no seu comando substituto. Isso ficaria assim:

:%s/-\+/\=repeat('=', len(submatch(0)))

Essencialmente, isso está dizendo:

Replace one or more dashes with '=' repeated n times, where n is the number of dashes.

Essa é a maneira mais direta e óbvia, mas é um pouco desajeitada / detalhada, o que é típico de comandos substitutos usando o registro de avaliação.

Você também pode fazer isso com o comando global. Isso seria algo como isto:

:g/^-\+$/norm Vr=

Essencialmente, isso está dizendo:

On every line containing nothing but dashes, type Vr= as if I had typed it myself.

V selecionará visualmente a linha inteira e r= substituirá a seleção inteira por caracteres '='.

    
por 25.01.2017 / 04:58
3

Você também tem :global para contextualizar a substituição.

:g/^-\+$/s/-/=/g
    
por 25.01.2017 / 09:27

Tags