Предполагая, что курсор находится в первой строке блока из двадцати строк, давайте рассмотрим следующую короткую команду Ex:
:,+9g/^/''+10m.|-j!
Это команда :global
, выполняющаяся на принадлежащих строкахв диапазон следующих десяти строк (начиная с текущей).В каждой из этих строк последовательно выполняются две команды Ex, ''+10m.
и -j!
.Первая команда занимает десятую строку под строкой, в которой был установлен курсор, и вставляет ее чуть ниже строки, в которой курсор находится в данный момент, с помощью команды :move
.Команда :join
, -j!
, добавляет только что перемещенную строку к той, которая находится непосредственно над ней (без вставки или удаления пробела между ними из-за модификатора !
).
Есть два соображения, которыенеобходимо принять во внимание, чтобы получить представление об этой линии движения.Во-первых, прежде чем команда, указанная в :global
, будет выполнена в еще одной строке, курсор будет расположен в первом столбце этой строки.Таким образом, адрес, указанный в вышеупомянутой команде :move
как .
, соответствует самой последней строке, в которой команда выполняется в данный момент.Во-вторых, номер строки, которая была текущей непосредственно перед тем, как команда :global
была отправлена на выполнение, добавляется в список переходов.Поэтому его адрес может быть получен в диапазонах через псевдометку '
(см. :help :range
).
Тот же эффект может быть достигнут с помощью команд обычного режима:
qqdd9+PgJ9-q9@q
Эта последовательность команд реализует ту же схему перемещения, используя макросы для повторения однострочной операции передачи.Команды для объединения первой пары строк, dd9+PgJ9-
, записываются в регистр "q
с помощью команды q
.Подобно команде Ex, предложенной выше, макросы удаляют текущую строку (dd
), перемещают курсор на девять строк вниз (9+
), вставляют только что вырезанную линию над новой позицией курсора (P
), соединяетдве строки без добавления или удаления пробелов между ними (gJ
) и перемещения курсора на девять строк вверх (9-
).Наконец, эти действия автоматически повторяются девять раз с помощью команды @
, чтобы объединить оставшиеся девять пар соответствующих строк.