Соединить несоответствующие строки - PullRequest
2 голосов
/ 07 декабря 2011

Я пытаюсь объединить все строки, у которых нет совпадений

пример текста:

text Like   
This is text of Line2  
This is text of Line3  
This is text of line4  
Like text  
This is text of line6  
This is text of line7  
Like  
This is text of line9  

Все строки, в которых нет слова «Мне нравится», должны объединиться (с пробелом междуих)

конечный результат:

text Like   
This is text of Line2 This is text of Line3 This is text of line4  
Like text  
This is text of line6 This is text of line7  
Like  
This is text of line9  

Кто-нибудь может мне помочь?

Ответы [ 3 ]

2 голосов
/ 07 декабря 2011
:%v/Like/.,/Like/-1j

Если вы хотите, чтобы строки начинались с Like, используйте вместо него ^ Like. И если вы хотите избавиться от конечных пробелов, сделайте так, как написал Сидайл.

Код означает:

 % for all lines
 v that do not match /Like/
 ., do from the current line (aka the (not) matching line)
 /Like/-1 To the line bevor the next line matching /Like/
 j join.

Так как это легче понять и выглядит намного лучше, я просто добавляю полную версию здесь:

$s/$/^MLike/|exec '%v/Like/.,/Like/-1j'|$d

Имеется следующее дополнение:

$s/$/^MLike/

с фактическим возвратом ^ M (через ^ Vreturn) эта строка добавляет «Like» в конце, на случай, если у вас его нет

exec '...'

Исполняет V-Line и защищает последний | от включения в повтор

$d

снова удаляет добавленное «Мне нравится».

2 голосов
/ 07 декабря 2011

Сначала избавьтесь от своих пробелов:

:%s/\s\+$

Теперь вот идея объединить эти строки:

:v/Like/normal VnkJ

Что должно быть само за себя.В каждой строке, которая не содержит «Like», войдите в визуальный линейный режим, найдите следующую строку «Like» (она использует предыдущий шаблон), перейдите на одну строку вверх и присоединитесь.

1 голос
/ 08 декабря 2011

Я бы использовал следующую команду.

:v/Like/,/\n.*Like\|\%$/j
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...