使用vim在指定行号处快速添加空行?
我知道如何在光标当前位置的上方或下方添加空行(使用使用vim在指定行号处快速添加空行?,vim,Vim,我知道如何在光标当前位置的上方或下方添加空行(使用o和o),但有没有快速方法在任意行号处添加空行?我意识到,添加第一个空行后,我给出的原始行号将不再准确,例如,如果我想在第5、10和15行添加空行,然后在第5行添加空行后,第二个空行应添加到第11行,然后第三个空行应添加到第17行 编辑:我可以使用宏执行此任务,即qaOq。但是,我仍然需要手动分别移动到行号。以下是在特定的行号中添加空行而不影响其他行的一般方法: :g/^/if (index([5,10,15],line('.')) != -1)
o
和o
),但有没有快速方法在任意行号处添加空行?我意识到,添加第一个空行后,我给出的原始行号将不再准确,例如,如果我想在第5、10和15行添加空行,然后在第5行添加空行后,第二个空行应添加到第11行,然后第三个空行应添加到第17行
编辑:我可以使用宏执行此任务,即
qaOq
。但是,我仍然需要手动分别移动到行号。以下是在特定的行号中添加空行而不影响其他行的一般方法:
:g/^/if (index([5,10,15],line('.')) != -1)| s//\r/g |endif
您可以添加或更改列表中的项目
[5,10,15]
(在index()函数中)。这些项目是将受到影响的行。以下是在特定的行号中添加空行而不影响其他行的一般方法:
:g/^/if (index([5,10,15],line('.')) != -1)| s//\r/g |endif
您可以添加或更改列表中的项目[5,10,15]
(在index()函数中)。这些项目是将受到影响的行。您只需获得附加(lineno,string | list)
,它提供了一些优点,例如:它不影响光标(即光标所在的位置),不会弄乱任何寄存器(但是”[
)
因此,您的具体需求可通过以下方式解决:
:call map(reverse([5, 10, 15]), 'append(v:val, "")')
您只需获得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)行,直到最后一行。您仍然可以使用宏。
假设您在第5行。如果在下面插入一行,第10行将变为11行。因此,在插入新行后,向下移动五行,假设光标移动到新行。(如果光标在第5行,向下移动6行)
让我们开始吧!
因此,移动到第5行。开始录制宏。qaq
清除a
寄存器。然后,按qa
开始录制。按O
创建新行。然后按Esc
。按5j
(或6j
)向下移动5(或6行)(我不记得光标将在哪里。)
然后按@a
递归地重放寄存器。按q
结束寄存器。现在,按@a
播放。这将递归地添加新行并向下移动5(或6)行,直到最后一行。只是一个一般性说明:按相反顺序插入或删除行(首先是最大行号)在其余的插入/删除操作中,不会将行号弄乱。如果我经常这样做,我会在shell中这样做,这将比vim容易得多。当然vim可以确保这一点。请注意:按相反的顺序插入或删除行(首先是最大行号)不会在其余的插入/删除操作中弄乱行号。如果我经常这样做,我会在shell中这样做,这将比vim容易得多。当然vim可以确保。我不知道如何在宏中实现这一点,比如说我想在第#1,2,3,5,8,13,21,34,55行中进行更改……如何在宏中移动到行?OP说他不想在手动将光标移动到目标行。这不适用于“任意行号”。它只适用于文章中的特定示例。@tnabdb我给出了斐波那契行号;-)这是可能的。我们可以使用变量以斐波那契顺序递增(添加两个之前的值)。使用execute命令和存储斐波那契值和文本运动的变量。录制宏时执行所有这些步骤。(我在录制和播放宏时使用了寄存器并修改了其值。)如果OP可以提供更多信息或关于这方面的具体信息,我将根据thatimho更改答案,如果您定期编辑固定距离(例如10、20、30等),这是最好的答案+1我不知道如何使用宏来实现这一点,比如我想在第1、2、3、5、8、13、21、34、55行进行更改……如何在宏中移动到该行?OP说他不想手动将光标移动到目标行。这对“任意行号”不起作用。它仅适用于文章中的特定示例。@tnabdb我给出了斐波那契行号;-)这是可能的。我们可以使用一个变量以斐波那契顺序递增(添加前两个值)。使用execute命令和存储斐波那契值和文本运动或移动的变量。在录制宏时执行所有这些步骤。(我在录制和播放宏时使用了register并修改了它的值。)如果OP可以提供更多信息或关于这方面的具体信息,我将根据该IMHO更改答案,如果您定期编辑固定距离(例如10、20、30等),这是最佳答案+1