如何在每个非空行之间插入一个空行?
例如。从
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
全局执行,而不仅仅是第一次出现
但这也会在空白行之间添加一行