使用vim快速在指定的行号添加空行?

时间:2016-07-28 13:00:00

标签: vim

我知道如何在光标当前位置的上方或下方添加空白行(使用oO),但有一种快速方法可以在任意行号处添加空行吗?我意识到在添加第一个空白行后,我给出的原始行号将不再准确,例如如果我想在第5行,第10行和第15行添加空白行,那么在第5行添加空白行后,应将第二行空白添加到第11行,然后添加第3个空白行第17行。

编辑:我可以使用宏来执行此任务,即qaO<esc>q。但是我必须单独手动移动到行号。

3 个答案:

答案 0 :(得分:2)

你只是得到了append(lineno, string|list),它具有以下几个优点:它只留下光标(即它的位置),它不会弄乱任何寄存器(但是'[)。

您的具体需求因此通过以下方式解决:

:call map(reverse([5, 10, 15]), 'append(v:val, "")')

答案 1 :(得分:1)

以下是在特定行号中添加空行而不影响其他行的一般方法:

:g/^/if (index([5,10,15],line('.')) != -1)| s//\r/g |endif

您可以添加或更改列表[5,10,15]中的项目(index()功能内部)。这些项目将受到影响。

答案 2 :(得分:1)

您仍然可以使用宏。 让我们假设你在第5行。如果在下面插入一行,第10行变为11.因此,在插入新行后,向下移动五行,假设光标移动到新行。 (如果光标位于第5行,则向下移动6行)

我们开始吧! 所以,转到第5行。开始录制宏。 qaq清除a注册。然后,按qa开始录制。按O创建新行。然后按Esc。按5j(或6j)向下移动5(或6行)(我不记得光标在哪里。)

然后按@a以递归方式重播寄存器。按q结束注册。现在,按@a进行播放。这将以递归方式添加新行并向下移动5(或6)行,直到最后一行。