在Vim中如何使用空行分隔行?

3

我正在处理一段类似于以下的注释块:

//this is comment 1
//this is comment 2
//this is comment 3
//this is comment 4

我希望它看起来像这样:

//this is comment 1

//this is comment 2

//this is comment 3

//this is comment 4

在命令模式下,是否有Vim快捷键可以对所选行进行此转换?

我十分钟后回来,发现已经有三个以上的好答案了!我现在使用的是:按下<Shift>+V选择行,输入:g//norm o。我不知道哪一个更令人惊叹,vim还是StackOverflow社区! - drug_user841417
5个回答

4
您可以使用:substitute命令。将光标放在第一行的任何位置:
:,+3s/$/\r

这会在每行末尾插入额外的换行符。

你也可以使用 :global 命令。将光标移动到这些行的任何一个位置,然后运行:

:,+3g//norm o

对于接下来的四行,此命令会执行o 正常模式命令,添加新的空白行。
在这两个命令中,,+3 前缀是一个范围,详情请见 :help range。简而言之,逗号分隔了范围的起始和终止行地址,如果省略前面的地址,则使用当前行。+3 地址指的是距离当前行三行的那一行。
对于这两个命令中的任意一个,你可以使用正常模式命令V创建一个跨越所有需要操作的行的可视块。然后,在输入:以开始命令时,它会自动填充范围,指定可视块。然后,你可以输入以sg开头的任意一个命令。
:'<,'>s/$/\r

你能解释一下 , 是什么意思吗? - Rod
当在范围中使用行号时,它们的格式为n,m。还有一些特殊情况,比如,+3,表示从当前行开始的三行。 - janne

1
您可以使用宏:
qao<esc>jq

然后使用3@a将宏应用于最后几行,执行3次。

其中:

qa    "Start recording a macro named a
o     "Insert new line under current line
<esc> "Exit insert mode
j     " Move down next line
q     " end macro

1

一个人可以使用命令

:g/^/pu_

整个缓冲区(默认)或所选择的行范围。


你能解释一下这个命令在做什么吗?我还没有找到一个好的方法来系统地参考vim/regex命令。 - drug_user841417

1

使用 V 键选择您的可视区域

然后运行正则表达式替换,将一个换行符替换为两个

:s/\n/\r\r/g


0

使用 V 选择你想要的行。

然后输入 :s/\ze/\r


“%V是多余的,它不会在选择的最后一行添加换行符。” - Andy Ray
问题没有提到最后一行之后是否有换行符,实际上在可视模式下 %V 是多余的,不需要。 - caio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接