Як приєднатися до кожного другого рядка у Vim?


28

Я хотів би приєднати багато (~ 1000) рядків, але тільки кожен непарний наступний. Вручну я міг би зробити

Jj

500 разів і це зробили. Однак як я можу виконати ці два твердження 500 разів за одну команду? Введення тексту

500Jj

приєднається до наступних 500 рядків, а потім рухається вниз по одній лінії.

Приклад:

Я маю:

a
b
c
d
e
f
g
h

Мені потрібно:

a b
c d
e f
g h

Редагувати: я спробував зіставити карту:

:map X Jj
500X

але, мабуть, я повинен прочитати документи з картою ще раз. Не працює.

Відповіді:


30

я би зробив це:

  1. почати запис макросу "q": qqJjq

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

( На самому ділі це не макрос з ім'ям «д», то іменований регістр , який називається «д». Замість інтерактивно заповнити цей регістр , як в 1. Ви можете також зробити :let @q = "Jj"і потім зробити 2.)


Класно, дякую, що запам'ятали мені макроси!
Болдевін

:% нормальний J був дуже швидким і легким (див. другий верхній варіант нижче) ... порівняно з цим макророзв’язком, який працює на понад 50 000 рядків
ihightower

@ihightower, тому я також підтримав цю відповідь. 6 років тому :)
akira

@akira ваш макрос просто врятував мені день, як мені сьогодні потрібне саме це макро рішення для іншої мети.
ihightower

24

Для цього в кожному рядку файлу:

:%normal J

або, коротше:

:%norm J

Щоб зробити це лише в частині файлу, виберіть рядки за допомогою Vабо отримайте діапазон іншим способом:

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

або, коротше:

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

Кевіну він хоче запустити дві команди на кожен файл, а не лише на одну.
JNK

1
використання :gвідповідей ОП потреба.
Люк Ермітт

2
Це дійсно приєднається до кожного другого рядка. Спробуй це!
Кевін Панько

Дякую за globalхитрість. У моєму випадку, але запис макросу був легшим та швидшим.
Болдевін

2
Лише здогадка - вона виконує команду в кожному рядку за порядком, а після того, як виконає перший рядок, другий рядок зараз відсутній (приєднавшись до першого рядка), тому він змушений перейти до третього рядка.
Кевін Панько

9

Як що до цього:

:g/$/j  

або

:g/$/j!  

і групуйте кожні три рядки

:g/$/j3 

1
Це ДУЖЕ приємне рішення Міро. Ще краще в тому, що ви можете використовувати це і в стандартному vi, хоча дивно, коли ви використовуєте кінцевий номер у SVR4.0 vi (як на Solaris), а не j3, роблячи 3 стовпці, це робить 4. (тому вам потрібно використовувати j2 там для групування кожні 3 рядки)
JohnGH


-1

Я не користувач Vim, але перевіряю онлайн-документи, як це виглядає

500(Jj) 

може працювати, оскільки він аналізує речі, що містять дужки як одиницю.


Гм, дякую за спробу, але в моїй версії Vim просто ігнорує дужки. Не могли б ви сказати мені посилання, де ви знайшли цей синтаксис?
Boldewyn

1
vimdoc.sourceforge.net/htmldoc/syntax.html - Вибачте, це не допомогло!
JNK

Насправді перевірте це посилання: vim.org/scripts/script.php?script_id=2136 подивіться, чи це робить те, що ви хочете.
JNK
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.