加入N行组

Mar*_*eed 2 vim

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

sid*_*yll 7

有多种方法可以解决这个问题.首先我想到的是记录一个宏,比如寄存器w:

qw5Jjq
Run Code Online (Sandbox Code Playgroud)

这基本上使用J普通命令连接5行并向下移动一行.然后你可以用一个简单的重复宏20次,20@w或者继续重复@@.

另一种,可能更"正确"的方式是使用:joinex命令,它与J普通命令相同,但可以缩写为:j并与其一起使用:g以在各种行中操作.例如:

:g/./j5
Run Code Online (Sandbox Code Playgroud)

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