我知道如何在光標當前位置的上方或下方添加空行(使用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