我知道如何在光标当前位置的上方或下方添加空白行(使用o
和O
),但有一种快速方法可以在任意行号处添加空行吗?我意识到在添加第一个空白行后,我给出的原始行号将不再准确,例如如果我想在第5行,第10行和第15行添加空白行,那么在第5行添加空白行后,应将第二行空白添加到第11行,然后添加第3个空白行第17行。
编辑:我可以使用宏来执行此任务,即qaO<esc>q
。但是我必须单独手动移动到行号。
答案 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)行,直到最后一行。