vim 连接N行的组

busg9geu  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(95)

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

1szpjjfi

1szpjjfi1#

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

qw5Jjq

字符串
这基本上使用了J普通命令来连接5行并向下移动一行。然后您可以使用简单的20@w重复该宏20次,或者使用@@继续重复。
另一种可能更“正确”的方法是使用:join ex命令,它与J普通命令相同,但可以缩写为:j,并与:g结合使用,以在各行中操作。例如:

:g/./j5


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

iqjalb3h

iqjalb3h2#

它可以用两个简单的正则表达式来完成:

:%s/\(\(^.*\n\)\{5}\)/\1\r/g

字符串
这一个只是把一个return每5行,其次是:

:%s/\(\n\{2}\)\|\n/\1/g


:%s/\n\{2}\zs\|\n//g


这只删除了1个return字符,而不是2个连续的字符

相关问题