一路阅读完第五章直接跳跃到第十章有关宏的内容,宏的录制和回放功能是多数编辑器都会提供,但我却基本不用这一功能。在 Vim 中宏比点号(.) 更有效的处理重复性操作,既然作为一个 Vimer, 以重复操作为耻,因而十分有必要对它加以了解和掌握的,又是一个一分钟上手需一辈子来掌握的东西。
1. 宏是录制在某个寄存器中,用 q{register}
启动录制,例如 qa
, 然后执行一系操作,再次按 q
结束录制,第一次回放用 @{register}
, 如 @a
,以后多次执行上一次宏回放可用 @@
.也可以支持数字,如 10@a
, 或 10@@
. :reg a
可查看寄存器 a
中宏的内容
2. 录制宏的一条金律是:确保每一条命令是可重复的。h
, j
, k
, l
, 没什么意义,而 0e
, A
, I
就是可重复的。当回放宏时遇到光标移动失败时, 如光标已在行首,宏中有 h
操作,那么后续的操作被放弃,根据 visualbell
配置可能有响声提示。宏的 motion 失败即放弃的特性让我们在重复执行宏时可以用一个足够大的数字,如 200@@
, 反正无副作用
3. 宏的序列执行与并发执行,当用 5@a
执行宏 "a 0f.r)w~j
, 其实是把宏放在一个队列里,往下跳行执行,其他任何一行执行失败,后续行将得不到更新。如果针对宏 "a 0f.r)w~
, 对选择的多行执行 :'<,'>normal @a
时效果就不一样了,它的意思是针对选择的多行单独执行宏,任何行的失败互不影响,所以它是并发执行的 阅读全文 >>