Я предполагаю, что вы просто хотите изменить порядок, а не пересортировать.
Это работает в моем маленьком тесте:
:g/^version/,/\nversion\|\%$/m0
Это предполагает, что любая строка, начинающаяся с "version", является началом раздела, который вы хотите сохранить вместе. Более простой способ сделать это - добавить пустую строку, содержащую только "версию" в конце файла, затем
:g/^version/,//-m0
игнорируйте сообщение об ошибке и удалите пустую строку.
В любом случае, это говорит vim выполнять [range]m0
на каждой строке, соответствующей ^version
. Команда m0
или :move 0
перемещает указанные строки в начало файла.
Во второй версии диапазон переходит от текущей строки (соответствующей ^version
) к следующей соответствующей строке, минус 1. Если вы можете сэкономить лишние два символа, добавьте точку и 1: .,//-1
эквивалентно ,//-
.
Первая версия, которую я дал, создает более сложную схему, чтобы учесть тот факт, что в последнем совпадении поиск следующего совпадения не удастся. В шаблоне vim \%$
относится к последней строке или EOF.