如何在vim的多行重复编辑?
我知道,在vim中,我经常可以通过在它前面添加一个数字来重复一个命令。 例如,可以通过以下方式删除5行:
5dd
例如,也经常可以指定一系列的行来应用命令
:10,20s:hello:goodbye:gc
我怎样才能进行“垂直编辑”? 例如,我希望在开始的每一行中插入一个特定的符号,比如说一个逗号(在跳转空白处,如果在命令模式下input一个逗号后input一个逗号)范围。 这怎么能实现(不采用倒期或倒期)呢?
:10,20s/^/,/
或者使用macros,logging:
qai , ESC jhq
用于:
@ a
说明: qa
开始录制macros来注册a
, q
结束录制。 有寄存器a
到z
可用于此。
Ctrl – v以块为单位进入可视模式。 然后,您可以像往常一样移动(如同往常一样),如果要在多行上插入某些内容,请使用Shift – i 。
所以对于文字:
abc123abc def456def ghi789ghi
如果你用Ctrl键把光标放到1上,按两下鼠标两下两列,然后按下Shift – i , 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匹配的内容”。