Joining lines without spaces in VIM

在VIM中合并多行文本且其中不产生空格

假设有一个文本文件,里面有很多行文本,我现在想要把所有文本合并为一行。
这不是很简单嘛!
只要 gg 先移动到首行,再 VG(用vG也可)选中所有行,然后用 J 合并所有行不就OK了么?

按上面的操作的确是合并成了一行,可是在原来每两行的连接处都会被添加一个空格,这不是我想要的。
要把所有文本合并为一行且中间不添加空格,该怎么做?
其实也很简单,在 J 之前再多敲一个 g 就可以了,连续的操作就是 ggVGgJ

那要是不合并全部文本,只合并一段(paragraph)文本,该怎么做?
可以这样操作 vipgJ,也就是在visual模式下选中段落然后 gJ

以此类推,基本的方法就是在visual模式下选中要合并的部分 gJ 一下就好。

VIM技巧:多行操作

Ctrl + v 进行列操作

按下 Ctrl + v 后移动光标,然后按 I 插入内容,按 Esc 结束。

insert columns

按下 Ctrl + v 后移动光标,然后按 x 删除所选内容。

delete columns

按下 Ctrl + v 后移动光标,然后按 c 替换所选内容,按 Esc 结束。

modify columns

按下 Ctrl + v 后移动光标,按 $ 移至行末,然后按 A 追加内容,按 Esc 结束。

append columns

Ctrl + v 还何以有更多种用法,请自行发掘。

用替换正则表达式的方式操作

替换行首占位符 ^ 来实现插入内容到行首。

1
:s/^/#/g

替换行末占位符 $ 来实现追加内容到行末。

1
:s/$/\/\/comment/g

操作指定区间的行。

1
:35,39s/red/blue/g

本例是将第35行至39行的内容中所有的 red 替换为 blue

通过替换正则表达式,可以实现各种操作,请灵活利用。