26

Я хотел бы объединить много (~ 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 ответов5

27

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

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

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

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

24

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

:%normal J

или короче:

:%norm J

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

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

или короче:

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

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

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

0

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

'<,'>g//s/.*\zs\n\ze.*/ /
-1

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

500(Jj) 

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .