如何在Vim中将多行合并为一行?


73

例如,我要合并这样的文本:

类别= [“书籍”,“企业”,“教育”,“娱乐”,“金融”,“游戏”,“医疗保健和健身”,“生活方式”,“医疗”,“音乐”,“导航”,“新闻”,“摄影”,“生产力”,“参考”,“社交网络”,“体育”,“旅行”,“公用事业”,“天气”,“全部”,]

进入

类别= [“书籍”,“企业”,“教育”,“娱乐”,“金融”,“游戏”,“医疗保健和健身”,“生活方式”,“医疗”,“音乐”,“导航”,“新闻”,“摄影”,“生产力”,“参考”,“社交网络”,“体育”,“旅行”,“公用事业”,“天气”,“全部”,]


18
为什么不简单地执行视觉选择然后按J
林奇

Answers:


112

在命令模式下:

[range]j[lines]

例如:在这里您想做整个缓冲区:

%j

如果您只想从当前光标位置起10行:

j10

如果您不想用空格替换新行,请!在之后使用j

%j!
j!10

对于超级:

5j20

它将转到第5行,并加入接下来的20行。


5
在这里,vipJ会更有效率。或者,如果在“ [”之前的第一行,则v%J也将起作用。或者,在文本块中的任何位置,va] J
Drasill 2011年

2
这应该是大写J而不是小写j
d0m1n0

33

最直观的方法是使用Vim可视线模式Shift+ v。您所要做的就是选择要合并到一行的内容,然后按Shift+ j


1
我完全同意。这就是我使用它的方式。
2015年

在我的Mac上,我似乎需要使用RightShift才能工作,LeftShift选择下面的下一行,将其添加到可视选择中。
James McCormac

14

使用J(大写)键。它将为您加入潮流

检查线程以获取更多的联接选项,并查看帮助页面。



3
:g/\[/,/\]/j

要么

/^CATEGORIES

:v//-1j

如果您有:

edit "Komputer" 
    ala 
    ala 
next 
edit "FortiGate" 
    ala 
    ala 
next

:g/edit/,/next/j

2

或者将从方括号到方括号的所有内容连接起来(假设文件中有很多这样的内容),而其他各行则保持不变,

:g/\[/,/\]/j

快速简单。

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.