如何在 Vim 中对多行重复编辑?

我知道在 Vim 中,我通常可以通过在命令前面简单地加上一个数字来重复命令。例如,可以通过以下方法删除5行:

5dd

例如,通常还可以指定要对其应用命令的行的范围

:10,20s:hello:goodbye:gc

如何执行「垂直编辑」 ?例如,我想在给定范围内的每一行的开头(跳过空格,即在命令模式下在 Shift-I 后键入一个逗号)插入一个特定的符号,比如一个逗号。如何做到这一点(不采用下降期-下降期-下降期-下降期) ?

113651 次浏览

:10,20s/^/,/

或者使用宏,记录:

q a i , ESC j h q

用法:

@ a

说明: q a开始录制一个宏来注册 aq结束录制。有 az寄存器可用于此。

我认为最简单的方法就是记录一个宏,然后想重复多少次就重复多少次。例如,要在每一行的开头添加逗号,请键入:

q a I , ESC j q

重复5次,你输入

5 @ a

除了已经回答过的宏之外,对于在一系列行中插入逗号的特定情况(比如从第10行到第20行) ,您可以执行以下操作:

:10,20s/\(.*\)/,\1

也就是说,您可以使用(and)创建一个编号的组匹配,并在替换字符串中使用1来表示“用匹配的内容替换”。

Ctrl-v进入视觉模式阻塞。然后您可以移动(hjkl方向,正常情况下) ,如果您想在多行上插入某些内容,请使用 Shift-i

至于文本:

abc123abc
def456def
ghi789ghi

如果你点击 Ctrl-v,光标在1上,点击 j两次,下降两列,然后是 Shift-i,ESC,你的文本会是这样的:

abc,123abc
def,456def
ghi,789ghi

(多行插入有一点延迟,直到你按下 ESC之后才会渲染)。

这就是: norm (al)命令的用途:

:10,20 normal I,

我使用 屏蔽可视模式屏蔽可视模式。这允许你在多行之间执行插入/编辑(又名“垂直编辑”)。

我相信最简单的方法就是

1)为一行记录一个宏,称之为“ a”; 在这种情况下,一个类型

Qa I,ESC j q

2)选择要应用宏的行块

3)使用‘ norm’函数在这段代码中执行宏‘ a’,例如,

:'<,'>norm@a

如果您已经在使用’重复你的上一个命令很多,然后我发现 这个是迄今为止最方便的解决方案。它允许您使用以下命令在可视块的每一行上重复上一个命令

" allow the . to execute once for each line of a visual selection
vnoremap . :normal .<CR>

编辑已经保存在 .操作符中,请执行以下操作:

  1. 选择要使用视觉模式将运算符应用于的文本
  2. 然后运行命令 :norm .