Как присоединиться к каждой второй строке в Vim?

Я хотел бы объединить много (~1000) строк, но только каждую нечетную со следующей. От руки я мог сделать

Jj

500 раз и сделали это. Тем не менее, как я могу выполнить эти два оператора 500 раз в одной команде? Typing

500Jj

присоединится к следующим 500 линиям и затем двинется вниз на одну строку.

Пример:

Я имею:

a
b
c
d
e
f
g
h

Я хочу:

a b
c d
e f
g h

Редактировать: я пробовал картирование:

:map X Jj
500X

но, видимо, мне следует снова прочитать документы по картографированию. Не работает

5 ответов

Решение

Я бы сделал это:

  1. начать запись макроса 'q': qqJjq

  2. повторить макрос 'q' 500 раз: 500@q

(на самом деле это не макрос с именем 'q', это именованный регистр с именем 'q'. вместо того, чтобы интерактивно заполнять этот регистр, как в 1., вы также можете сделать :let @q = "Jj" а потом делай 2)

Чтобы сделать это в каждой строке файла:

:%normal J

или короче:

:%norm J

Чтобы сделать это только на части файла, выделите строки с помощью V или получите диапазон другим способом:

:'<,'>global/^/normal J

или короче:

:'<,'>g/^/norm J

Как насчет этого

: Г /$/ х
или же
: Г /$/ J!
и группировать каждые 3 строки
: Г /$/j3

Я не пользователь Vim, но проверяю онлайн документы, похоже

500(Jj) 

может работать, так как он разбирает вещи внутри скобок как единое целое.

Мы также можем играть с:

'<,'>g//s/.*\zs\n\ze.*/ /
Другие вопросы по тегам