Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用vim在指定行号处快速添加空行?_Vim - Fatal编程技术网

使用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