一路阅读完第五章直接跳跃到第十章有关宏的内容,宏的录制和回放功能是多数编辑器都会提供,但我却基本不用这一功能。在 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时效果就不一样了,它的意思是针对选择的多行单独执行宏,任何行的失败互不影响,所以它是并发执行的 Read More