我知道在Vim我经常可以通过在它前面添加一个数字来重复命令.例如,可以通过以下方式删除5行:
5dd
例如,通常还可以指定一系列行来应用命令
:10,20s:hello:goodbye:gc
如何执行"垂直编辑"?例如,我想在给定的每一行的开头(跳过空格,即你在命令模式下按Shift-I键入逗号后得到的内容)中插入一个特殊的符号,比如一个逗号.范围.如何实现这一目标(不采用下行周期 - 下降期)?
Ctrl- 按块v进入可视模式.然后你可以移动(hjkl正常,顺时针),如果你想在多行上插入一些东西,使用Shift- i.
所以对于文本:
abc123abc def456def ghi789ghi
如果你点击Ctrl- v将光标放在1上,点击j两次下去两列,然后Shift- i,ESC,你的文字将如下所示:
abc,123abc def,456def ghi,789ghi
(多线插入有一点滞后,直到你击中后才会渲染ESC).
:10,20s/^/,/
或使用宏,记录:
q a i , ESC j h q
用于:
@ a
说明:q a
开始录制宏进行注册a
,q
结束录制.有寄存器a
,以z
供这一点.
这就是:norm(al)命令的用途:
:10,20 normal I,
如果您已经使用'.' 重复你的最后一个命令,然后我发现这是迄今为止最方便的解决方案.它允许您使用在视觉块的每一行上重复上一个命令
" allow the . to execute once for each line of a visual selection vnoremap . :normal .
我相信最简单的方法是
1)记录一行的宏,称之为'a'; 在这种情况下有一种类型
qa I,ESC jq
2)选择要应用宏的行块
3)使用'norm'函数在这个行块上执行宏'a',即
:'<,'>norm@a
我认为最简单的方法是录制宏,然后根据需要重复宏.例如,要在每行的开头添加逗号,请键入:
q a I , ESC j q
重复那5次,你进入
5 @ a