vim: объединить: g с командой, которая использует диапазон - PullRequest
2 голосов
/ 17 августа 2010

У меня есть текст, который состоит из строк, и некоторые из них выглядят так:

A test1
test test
test test

A test2
test test
test test

Строка начинается с A (произвольная, но уникальная строка) и заканчивается пустой строкой.Мне нравится удалять все лишние символы новой строки из реальных строк (без влияния на другие строки, не совпадая с /^A/) и чтобы линии выглядели так:

A test1Тестовый тест Тестовый тест

Тест2 Тестовый тестовый тест1028 *).Просматривать весь файл и делать это вручную довольно обыденно, поэтому я попытался объединить это с :g/^A/:

:g/^A/.,/^$/-2s/\n/ /

Но это привело к ошибке, так как в команде после :g// диапазон не былраспознан.Я пытался использовать normal тоже - :g/^A/normal .,/^$/-2s/\n/ / и :g/^A/exe 'normal .,/^$/-2s/\n/ /' - безуспешно.

Есть ли способ запустить из-под :g// команду с диапазоном?Или есть какой-то другой простой (== без сценариев) способ выполнить ту же задачу форматирования?

Ответы [ 3 ]

2 голосов
/ 17 августа 2010

Попробуй это. Чтобы ввести ^M, используйте ctrl-v enter.

:g/^A/normal V/^$/^MkJ
0 голосов
/ 18 августа 2010

объединение: g с командами, которые принимают диапазон, работает для меня.например,

:g/^A/.,/^$/-1join 

, как и ваша оригинальная версия:

:g/^A/.,/^$/-2s/\n/ /

NB. Если вы хотите краткости, то команда соединения может быть сокращена до j, поэтому первая версия становится:

:g/^A/.,/^$/-1j 
0 голосов
/ 17 августа 2010

Попробуйте это может быть:

:g/^A/normal JJ
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...