在vim缓冲区中的每一行上运行vim命令

在vim缓冲区中的每一行上运行vim命令,vim,Vim,我想对当前vim缓冲区中的每一行执行JJ。因为我有非常大的文件,所以不可能在每一行上手动运行。我怎么能告诉维姆帮我做这件事? 基本上,我有一个文件,其中的数据在一列中。我想把它转换成三列 a b c 致: 使用宏和 将JJ命令重新编码到q uu 定义q宏。全部撤销 :%norm! @q 将q应用于整个文档 附言:我的英语不好 :g/^/join 连接整个缓冲区中的连续行(1+2、3+4等…)。您还可以向:global命令提供[range],该命令仅用于智能线路处理;^正则表达式模式匹配任

我想对当前vim缓冲区中的每一行执行
JJ
。因为我有非常大的文件,所以不可能在每一行上手动运行。我怎么能告诉维姆帮我做这件事? 基本上,我有一个文件,其中的数据在一列中。我想把它转换成三列

a
b
c
致:

使用宏和

JJ
命令重新编码到
q

uu
定义
q
宏。全部撤销

:%norm! @q
q
应用于整个文档

附言:我的英语不好

:g/^/join
连接整个缓冲区中的连续行(1+2、3+4等…)。您还可以向
:global
命令提供
[range]
,该命令仅用于智能线路处理;
^
正则表达式模式匹配任何行

要连接三条连续线,请使用

:g/^/.,.+2join

(如果行的总数不能被3整除,则前者可能会给出一个错误;后者可以避免该错误。)

和另一个:

:%norm JJ

请参见
:help:normal

可能与Please重复,学习使用标记法以防止其他人将时间浪费在格式错误的问题上。@BimbaLaszlo问题的预期输出不是一行。@Kent是的,我现在可以看到,但应将问题中的示例改写为
a\n b\n c\n d
->
ab\n cd
@BimbaLaszlo,这并不完全正确。他做的xargs-n3比我的简单。我猜我是被问题的标题骗了想
:global
:g/^/.,.+2join
:g/^/join|join
:%norm JJ