我知道如何在光标当前位置的上方或下方添加空行(使用o
和O
),但是有没有一种快速方法可以在任意行号处添加空行?我意识到,在第一个空白行被添加后,我给出的原始行号将不再准确,例如,如果我想在第5行,第10行和第15行添加空行,那么在将第5行添加到空行后,第2行应该被添加到第11行,然后第三行应该被添加到行第17行。使用vim在指定的行号处快速添加空行?
编辑:我可以使用宏来完成此任务,即qaO<esc>q
。但是,我必须仍然手动移动到单独的行号。
我知道如何在光标当前位置的上方或下方添加空行(使用o
和O
),但是有没有一种快速方法可以在任意行号处添加空行?我意识到,在第一个空白行被添加后,我给出的原始行号将不再准确,例如,如果我想在第5行,第10行和第15行添加空行,那么在将第5行添加到空行后,第2行应该被添加到第11行,然后第三行应该被添加到行第17行。使用vim在指定的行号处快速添加空行?
编辑:我可以使用宏来完成此任务,即qaO<esc>q
。但是,我必须仍然手动移动到单独的行号。
这里是在具体行号加空行,而不会影响其他线路的一般方式:
:g/^/if (index([5,10,15],line('.')) != -1)| s//\r/g |endif
您可以添加或更改列表中[5,10,15]
(该index()
函数内)的项目。这些项目是会受到影响的线路。
你只是得到append(lineno, string|list)
,它具有如下几个优点:它使光标独立(即它在哪里),它不会混淆任何寄存器(但是'[
)。
:call map(reverse([5, 10, 15]), 'append(v:val, "")')
,您仍然可以使用宏:
您的特定需求因此被解决。 假设你在第5行。如果你在下面插入一行,第10行变为11.因此,在插入新行后,向下移动五行,假定光标移动到新行。 (如果光标在第5行本身,则向下移动6行)
我们开始吧! 因此,请移至第5行。开始录制宏。 qaq
来清除a
注册。然后,按qa
开始录制。按O
创建新的线路。然后按Esc
。通过按5j
(或6j
)(我不记得光标将在哪里),向下移动5(或6行)。
然后按@a
以递归方式重播寄存器。按q
结束注册。现在,按@a
播放。这将递归地添加一个新行并向下移动5(或6)行,直到最后一行。
只是一般说明:插入或删除相反顺序的行(最大行数第一个)不会将剩余插入/删除的行号搞砸。 – Kusalananda
如果我经常这样做,我在shell中做,它会比vim容易得多。当然vim可以肯定的。 – Kent