É possível converter um texto que está na forma de um changelog do mais antigo para o mais novo, usando o vim?

0

É possível converter um texto na forma de um changelog? no mais novo primeiro, usando vim?

É assim:

version 1.0

multi_line description for 1.0


version 1.01

multi_line description for 1.01

etc

e eu quero convertê-lo em

version 1.90

multi_line description for 1.90


version 1.89

multi_line description for 1.89

etc

O texto é realmente muito longo para convertê-lo manualmente.

PS. "descrição de várias linhas", por exemplo:

Added feature x
Fixed bug y
Removed element z
Updated file z
    
por darkred 23.04.2014 / 19:01

1 resposta

1

Eu suponho que você só quer inverter a ordem, não reordenar.

Isso funciona no meu pequeno teste:

:g/^version/,/\nversion\|\%$/m0

Isso pressupõe que qualquer linha que comece com "versão" é o começo de uma seção que você deseja manter unida. Uma maneira mais simples de fazer isso é adicionar uma linha fictícia contendo apenas "versão" no final do arquivo, então

:g/^version/,//-m0

ignore a mensagem de erro e remova a linha falsa.

De qualquer forma, isso diz ao vim para executar [range]m0 em cada linha correspondente a ^version . O comando m0 ou :move 0 move as linhas indicadas para o início do arquivo.

Na segunda versão, o intervalo vai da linha atual (a correspondente ^version ) até a próxima linha correspondente, menos 1. Se você puder poupar dois caracteres extras, adicione o ponto e o 1: .,//-1 é equivalente a ,//- .

A primeira versão que dei cria um padrão mais complexo para lidar com o fato de que, na última partida, a busca pela próxima partida falhará. Em um padrão vim, \%$ refere-se à última linha ou EOF.

    
por 23.04.2014 / 19:35