Vim - 在行之间添加空行

ayu*_*eos 17 vim

如何在每个非空行之间插入一个空行?

例如。从

line 1
line 2
line 3

line 4
line 5
Run Code Online (Sandbox Code Playgroud)

line 1

line 2

line 3

line 4

line 5
Run Code Online (Sandbox Code Playgroud)

Tre*_*ell 28

Vim 的 :g 命令正是为这种任务而设计的;在匹配特定模式的每一行上运行单个操作。这是我的回答:

:g/.\n\n\@!/norm o
Run Code Online (Sandbox Code Playgroud)

我使用的模式是/.\n\n\@!/. 将其分解成其组成部分:

  • .匹配行中的任何字符。(用于立即从考虑中丢弃任何现有的空行)
  • \n 匹配上面字符末尾的单个\n
  • \n\@! 如果在较早的 \n 之后紧接着有另一个 \n,则匹配失败。

(检查正则表达式中:h E59有关\@!和类似匹配说明符的更多信息——还有其他一些信息!)

所以 :g 命令的正则表达式现在已经选择了每个以单个换行符终止的非空行,并且后面没有空行。

:g语句中的模式之后是在匹配行上运行的命令。在这种情况下,我已经告诉它执行正常模式命令(缩写为norm),要运行的命令很简单o,它会在当前行下方插入一个空行。

综上所述,该命令会查找其下方没有空行的每一行,并添加一个。这就是全部!您可能想查看 vim wiki 的Power of G文章,了解您可以使用的更多花哨的东西:g(它是负面的姐妹,:v)——这是您很快就会依赖的那些非常有用的命令之一,然后在编辑器中非常想念哪个没有。


小智 3

另一种做法是:

:%s/$/\r/g
Run Code Online (Sandbox Code Playgroud)

$是行尾 \r添加新行, g全局执行,而不仅仅是第一次出现

但这也会在空白行之间添加一行