如何加入Vim的第二行?


27

我想加入很多行(〜1000),但只有下一行会很奇怪。我可以用手做

Jj

500次并完成。但是,如何在一个命令中将这两个语句执行500次?打字

500Jj

将加入接下来的500行,然后向下移动一行。

例:

我有:

a
b
c
d
e
f
g
h

我想要:

a b
c d
e f
g h

编辑:我尝试映射:

:map X Jj
500X

但显然我应该再次阅读映射文档。不起作用

Answers:


30

我会这样做:

  1. 开始记录宏“ q”: qqJjq

  2. 将宏“ q”重播500次: 500@q

(实际上,它不是一个名为“ q”的宏,它是一个名为“ q”的命名寄存器。与其像1中那样交互式地填充该寄存器,还可以执行:let @q = "Jj"然后执行2。)


太酷了,感谢您记住我的宏!
Boldewyn

:%normal J非常快速且容易(请参见下面的第二个顶级解决方案)...与在超过50,000行上运行它的宏解决方案相比
ihightower

@ihightower这就是为什么我也赞成这个答案。6年前:)
akira

@akira您的宏刚刚保存了我的一天,因为我今天只需要此宏解决方案即可用于其他目的。
ihightower

24

为此,请在文件的每一行上执行以下操作:

:%normal J

或更短:

:%norm J

要仅在文件的一部分上执行此操作,请选择带有V或通过其他方式获得范围的行:

:'<,'>global/^/normal J

或更短:

:'<,'>g/^/norm J

凯文(Kevin),他希望对每个文件运行两个命令,而不仅仅是一个。
JNK

1
使用:gOP需要答案。
卢克·赫米特

2
这确实会在第二行加入。试试吧!
凯文·潘科

谢谢你的global把戏。但就我而言,录制宏更加容易和快捷。
Boldewyn

2
只是猜测-它按顺序在每行上执行命令,并且在完成第一行之后,第二行现在消失了(已与第一行连接在一起),因此被迫移至第三行。
凯文·潘科

8

那这个呢:

:g/$/j  

要么

:g/$/j!  

并每三行分组

:g/$/j3 

1
这是一个非常好的解决方案,Miro。更好的是,您也可以在标准vi中使用它,尽管很奇怪,当您在SVR4.0 vi中使用尾随数字(如在Solaris上)而不是j3使3列变为4时(因此,您需要使用j2用于每3行分组)
JohnGH,2016年


-1

我不是Vim的用户,但是查看在线文档看起来像

500(Jj) 

由于它可以将括号内的内容解析为一个单元,因此可能会起作用。


嗯,谢谢您的尝试,但是在我的版本中,Vim只是忽略了括号。您能告诉我在哪里找到此语法的链接吗?
Boldewyn

1
vimdoc.sourceforge.net/htmldoc/syntax.html-对不起,它没有帮助!
JNK

实际检查以下链接:vim.org/scripts/script.php?script_id=2136 看看这样做是否符合您的要求。
JNK 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.