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

时间:2008-12-10 12:39:15

标签: vim

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

5dd

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

:10,20s:hello:goodbye:gc

如何执行“垂直编辑”?例如,我想在给定的每一行的开头(跳过空格,即你在命令模式下按Shift-I键入逗号后得到的内容)中插入一个特殊的符号,比如一个逗号。范围。如何实现这一目标(不采用下行周期下降周期)?

9 个答案:

答案 0 :(得分:111)

Ctrl - v 按块进入可视模式。然后你可以移动( h j k l - 正常),如果你想插入多行的东西,使用 Shift - i

所以对于文本:

abc123abc
def456def
ghi789ghi

如果你点击 Ctrl - v ,将光标放在1上,点击 j 两次下去两列,然后 Shift - i ESC ,你的文字看起来像这样:

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

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

答案 1 :(得分:94)

:10,20s/^/,/

或使用宏,记录:

q a i , ESC j h q

用于:

@ a

说明:q a开始录制宏以注册aq结束录制。可以使用az的寄存器。

答案 2 :(得分:50)

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

:10,20 normal I,

答案 3 :(得分:40)

如果您已经在使用'。'为了重复你的最后一个命令,我发现this是迄今为止最方便的解决方案。它允许您使用

在可视块的每一行上重复上一个命令
" allow the . to execute once for each line of a visual selection
vnoremap . :normal .<CR>

答案 4 :(得分:18)

我认为最简单的方法是

1)记录一行的宏,称之为'a';在这种情况下有一种类型

  

q a I,ESC j q

2)选择要将宏应用于

的行块

3)使用'norm'函数在这个行块上执行宏'a',即

:'<,'>norm@a

答案 5 :(得分:15)

我认为最简单的方法是录制宏,然后根据需要重复宏。例如,要在每行的开头添加逗号,请键入:

q a I , ESC j q

重复5次,输入

5 @ a

答案 6 :(得分:2)

我使用block visual mode。这允许您跨多行执行插入/编辑(也称为“垂直编辑”)。

答案 7 :(得分:1)

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

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

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

答案 8 :(得分:0)

将您的修改保存在.运算符中,然后执行以下操作:

  1. 选择您想要将操作员应用于视觉模式的文本
  2. 然后运行命令:norm .