将此行之后的空白行移至Vim中此行之前

时间:2017-12-13 16:46:58

标签: regex vim substitution

我有以下文字:

A simple line
TITLE1:

Another usual line
TITLE2:

More usual lines here
TITLE3:

Last line of this sample text.

我想将上面的内容转换为:

A simple line

TITLE1:
Another usual line

TITLE2:
More usual lines here

TITLE3:
Last line of this sample text.

因此,我想删除TITLE行之后的空行,而是在标题行之前添加一个空行。 TITLE行全部由 以#39; <#em; 结尾标识。

我尝试了以下代码

:%s/(.+):\r/\n\1:/g

但它不起作用。

2 个答案:

答案 0 :(得分:2)

如果我理解您的要求,我会选择:g//{cmd}代替:s/../../

g/:$/norm JO

如果您不想在:之后留出空格,请在g之前添加J

解释

:g/pat/norm JO
  • 对于匹配pat的所有行,请执行普通模式命令JO
  • J确实加入了,这意味着“删除了”下一个换行符
  • O在当前行之前添加一个空行。

您可以将光标移到TITLE行,按JO,看看会发生什么。

如果您需要进一步的解释/详细信息,请阅读:

:h :g
:h :norm
:h J  (or :h gJ)
:h O

答案 1 :(得分:1)

:g/TITLE/ m+1

它是如何工作的?

: ............... command
g ............... global
/TITLE/ ......... all lines with TITLE
m+1 ............. move to the next line