如何在vim的多行重复编辑?

我知道,在vim中,我经常可以通过在它前面添加一个数字来重复一个命令。 例如,可以通过以下方式删除5行:

5dd 

例如,也经常可以指定一系列的行来应用命令

 :10,20s:hello:goodbye:gc 

我怎样才能进行“垂直编辑”? 例如,我希望在开始的每一行中插入一个特定的符号,比如说一个逗号(在跳转空白处,如果在命令模式下input一个逗号后input一个逗号)范围。 这怎么能实现(不采用倒期或倒期)呢?

:10,20s/^/,/

或者使用macros,logging:

qai , ESC jhq

用于:

@ a

说明: qa开始录制macros来注册aq结束录制。 有寄存器az可用于此。

Ctrlv以块为单位进入可视模式。 然后,您可以像往常一样移动(如同往常一样),如果要在多行上插入某些内容,请使用Shifti

所以对于文字:

 abc123abc def456def ghi789ghi 

如果你用Ctrl键把光标放到1上,按两下鼠标两下两列,然后按下Shifti ESC ,你的文字就会像这样:

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

(多行插入有一点滞后,并不会渲染,直到你打ESC后 )。

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

 :10,20正常我,

如果您已经在使用“。” 重复你的最后一个命令,那么我发现这是迄今为止最方便的解决scheme。 它允许你通过使用在视觉块的每一行重复你的最后一个命令

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

我相信最简单的方法是

1)logging一行的macros,称之为'a'; 在这种情况下是一种types

qa我,ESC jq

2)select你想要应用macros的行块

3)使用“规范”function在这一行代码上执行macros“a”,即,

 :'<,'>norm@a 

我认为最简单的就是录制一个macros,然后重复这个macros。 例如,要在每行的开头添加一个逗号,可以input:

 qa I , ESC jq 

重复5次,你input

 5 @ a 

我使用块视觉模式 。 这允许您跨多行执行插入/编辑(又称“垂直编辑”)。

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

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

也就是说,您可以使用\(和\)创build编号的组匹配,并在replacestring中使用\ 1来表示“replace匹配的内容”。