我知道在Vim我经常可以通过在它前面添加一个数字来重复命令。例如,可以通过以下方式删除5行:
5dd
通常也可以指定一系列行来应用命令,例如
:10,20s:hello:goodbye:gc
如何执行“垂直编辑”?例如,我想在给定的每一行的开头(跳过空格,即你在命令模式下按Shift-I键入逗号后得到的内容)中插入一个特殊的符号,比如一个逗号。范围。如何实现这一目标(不采用下行周期下降周期)?
答案 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
开始录制宏以注册a
,q
结束录制。可以使用a
到z
的寄存器。
答案 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)
将您的修改保存在.
运算符中,然后执行以下操作:
:norm .