Saya berasumsi Anda hanya ingin membalik urutan, bukan mengurutkan ulang.
Ini berfungsi dalam tes kecil saya:
:g/^version/,/\nversion\|\%$/m0
Ini mengasumsikan bahwa setiap baris yang dimulai dengan "versi" adalah awal dari bagian yang ingin Anda pertahankan. Cara yang lebih sederhana untuk melakukannya adalah dengan menambahkan baris dummy yang hanya berisi "versi" di akhir file, lalu
:g/^version/,//-m0
abaikan pesan kesalahan, dan hapus garis dummy.
Either way, ini memberitahu vim untuk mengeksekusi [range]m0
pada setiap baris yang cocok ^version
. Perintah m0
atau :move 0
memindahkan garis yang ditunjukkan ke awal file.
Di versi kedua, rentang berjalan dari baris saat ini (yang cocok ^version
) ke baris yang cocok berikutnya, minus 1. Jika Anda dapat menyimpan dua karakter tambahan, tambahkan titik dan 1: .,//-1
setara dengan ,//-
.
Versi pertama yang saya berikan kepada koki memberikan pola yang lebih kompleks untuk menghadapi kenyataan bahwa, pada pertandingan terakhir, pencarian untuk pertandingan berikutnya akan gagal. Dalam pola vim, \%$
mengacu pada baris terakhir atau EOF.