Vim N条直线的连接组

Vim N条直线的连接组,vim,Vim,我有一个从旧数据库生成的文本文件,每个字段包含一行,记录之间没有分隔符,只知道有多少字段。我想做的是加入前N行,然后加入下N行,依此类推。在Vim中有什么方法可以做到这一点吗?是否有一种方法可以基于任意VimL表达式(如line(“.”%5==0)而不仅仅是正则表达式来选择要应用命令的行?有多种方法可以解决此问题。我首先想到的是录制宏,比如在registerw: qw5Jjq 这实际上是使用Jnormal命令连接5行并向下移动一行。然后你可以用一个简单的20@w或以后继续使用@重复 另一种可能

我有一个从旧数据库生成的文本文件,每个字段包含一行,记录之间没有分隔符,只知道有多少字段。我想做的是加入前N行,然后加入下N行,依此类推。在Vim中有什么方法可以做到这一点吗?是否有一种方法可以基于任意VimL表达式(如
line(“.”%5==0
)而不仅仅是正则表达式来选择要应用命令的行?

有多种方法可以解决此问题。我首先想到的是录制宏,比如在register
w

qw5Jjq
这实际上是使用
J
normal命令连接5行并向下移动一行。然后你可以用一个简单的
20@w
或以后继续使用
@
重复

另一种可能更“合适”的方法是使用
:join
ex命令,它与
J
普通命令相同,但可以缩写为
:J
,并与
:g
一起使用,以在不同的行中操作。例如:

:g/./j5

这将匹配每一行非空行,并在每一行中连接下5行(包括)。然后移动到下一行并连接更多的5,依此类推。

是否需要任何特殊的分隔符,或者按空格连接就足够了?按空格连接就足够了。我完全忘记了ex-line
join
命令使用了一个参数来连接行数。所以
:%j5
可以工作,但我也应该意识到我可以做
:%normal5j
。无论如何,谢谢!当然,你看,你的答案比我的好得多,我将编辑
:g
部分以供将来参考,谢谢你指出,我完全错过了it@MarkReed您可以多次使用
:%j5
加入吗?我认为它只适用于给定范围的第一组。你是对的,你需要
g/
。但不是重复前面的正则表达式的
g/
。类似于
g/
的内容来匹配每一行(非空)。@MarkReed已更新,完美无瑕。非常感谢。