2011-12-07 79 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