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.