2016-07-28 41 views
0

我知道如何在光標當前位置的上方或下方添加空行(使用oO),但是有沒有一種快速方法可以在任意行號處添加空行?我意識到,在第一個空白行被添加後,我給出的原始行號將不再準確,例如,如果我想在第5行,第10行和第15行添加空行,那麼在將第5行添加到空行後,第2行應該被添加到第11行,然後第三行應該被添加到行第17行。使用vim在指定的行號處快速添加空行?

編輯:我可以使用宏來完成此任務,即qaO<esc>q。但是,我必須仍然手動移動到單獨的行號。

+1

只是一般說明:插入或刪除相反順序的行(最大行數第一個)不會將剩餘插入/刪除的行號搞砸。 – Kusalananda

+0

如果我經常這樣做,我在shell中做,它會比vim容易得多。當然vim可以肯定的。 – Kent

回答

1

這裏是在具體行號加空行,而不會影響其他線路的一般方式:

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

您可以添加或更改列表中[5,10,15](該index()函數內)的項目。這些項目是會受到影響的線路。

1

你只是得到append(lineno, string|list),它具有如下幾個優點:它使光標獨立(即它在哪裏),它不會混淆任何寄存器(但是'[)。

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

,您仍然可以使用宏:

您的特定需求因此被解決。 假設你在第5行。如果你在下面插入一行,第10行變爲11.因此,在插入新行後,向下移動五行,假定光標移動到新行。 (如果光標在第5行本身,則向下移動6行)

我們開始吧! 因此,請移至第5行。開始錄製宏。 qaq來清除a註冊。然後,按qa開始錄製。按O創建新的線路。然後按Esc。通過按5j(或6j)(我不記得光標將在哪裏),向下移動5(或6行)。

然後按@a以遞歸方式重播寄存器。按q結束註冊。現在,按@a播放。這將遞歸地添加一個新行並向下移動5(或6)行,直到最後一行。

+2

我不明白這是如何做到這一點的宏,說我想要做的改變#1,2,3,5,8,13,21,34,55行....你如何移動宏觀上的線? OP表示他不想手動將光標移動到目標行。 – Kent

+0

這對於「任意行數」不起作用。它僅適用於帖子中的特定示例。 – tnabdb

+0

@tnabdb我給斐波那契行號碼;-) – Kent