如何加入所有线路直到下一个条件?

Rem*_*man 5 regex vim join lines

我无法找到如何加入所有行直到下一个条件发生(一行只有一个或多个数字)pe

输入:

1    
text text text text (with numbers)   
text text text text (with numbers)    
2
this text   
text text text text (with numbers)  
text text text  
3  
text text text text (with numbers)  
4  
etc  
Run Code Online (Sandbox Code Playgroud)

渴望输出:

1 text text text text (with numbers) text text text text (with numbers)    
2 this text text text text text (with numbers) text text text  
3 text text text text (with numbers)  
4  
etc
Run Code Online (Sandbox Code Playgroud)

我通常使用global/^/,+2 join但在上面的例子中,加入的行数并不总是3.

Ing*_*kat 6

而不是命令+2范围的静态结束:join,只需为仅包含数字(/^\d\+$/)的下一行指定搜索范围,然后连接直到(-1)之前的行:

:global/^/,/^\d\+$/-1 join
Run Code Online (Sandbox Code Playgroud)


mb1*_*b14 5

v/^\d\+/-j 会做的.

v执行函数为每个不匹配条件 ^\d\+的条件:行以数字开头. -j向后退一行连接.或者,如果您更喜欢将当前行加入一行.

所以基本上我们将每个与你的条件不匹配的行加入前一行.