2011-12-07 81 views
2

我想加盟沒有比賽誰所有行加入不匹配的行

示例文本:

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 

誰能幫助我?

回答

1

我會使用下面的命令。

:v/Like/,/\n.*Like\|\%$/j 
2

首先擺脫你的尾隨空格:

:%s/\s\+$ 

現在,這裏的一個想法,加入這些行:

:v/Like/normal VnkJ 

這應該是不言自明的。在每行不包含「Like」的行上, 進入視覺行模式,搜索下一個「Like」行(它重新使用 先前的模式),然後加入並加入。

+0

謝謝sidyll,我注意到了一個問題。當只有1行不加工時,它不起作用「like」 – Reman

+0

如果在最後一個「Like」行之後有緩衝行,那麼該命令不起作用! –

2
:%v/Like/.,/Like/-1j 

如果您只需要以Like開頭的行,請使用^ Like。 如果你想擺脫尾隨空格,就像sidyll寫的那樣。

代碼的意思是:

% 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. 

由於這是比較容易理解,看起來更漂亮,我只是添加compleate版本在這裏:

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

它具有以下除了:

$s/$/^MLike/ 

以^ M爲實際回報(通過^ Vreturn完成) 此行添加s「Like」最後,以防萬一你沒有一個

exec '...' 

執行v行並保護最後|從被包含在重複中

$d 

再次刪除添加的「Like」。

+0

謝謝。有用。你能告訴我你在這段代碼中做了什麼嗎? ;)我試圖玩一下代碼,但它不起作用,當我想加入所有行從「這」直到「line7」(因爲這使用多行?) – Reman

+0

Nikodemus,它不起作用時最後一行有一個「like」 – Reman

+0

它沒有?即使有喜歡,我也可以得到完美的結果。也就是說,類似於它自己的一條線。 – Nikodemus