如何在事后将Vim中单行的操作记录为宏?
如何在Vim中将已执行的单行操作事后录制为宏
完全可行,给你两种实用的方法:
方法一:通过撤销重做快速录制
这是最直观的方法,适合大多数可视化编辑场景:
- 先把光标移到和你之前编辑时完全相同的起始位置(比如行首),然后按
u多次,撤销到该行编辑前的初始状态 - 输入
qa开始录制宏到a寄存器(你也可以换成其他字母寄存器) - 按
Ctrl+r多次,重做你刚才的所有编辑操作,直到回到该行编辑完成后的状态 - 按
q停止录制 - 现在输入
@a就能重复执行刚才的所有操作,用@@可以快速重复宏
方法二:利用命令历史拼接宏(适合纯Ex命令操作)
如果你刚才的编辑都是通过Ex命令(比如:s/xxx/yyy/这类)完成的:
- 输入
:history查看最近执行的命令列表,找到你针对该行执行的所有命令 - 把这些命令按顺序拼接成字符串,比如
:let @a = ':s/old/new/^M:norm A;^M'(注意^M是按Ctrl+v再按回车输入的,表示回车) - 保存后,
@a就会依次执行这些命令
注意事项
- 用第一种方法时,确保撤销和重做的次数准确,避免多执行或少执行操作
- 如果你的操作包含跨行移动,录制宏前要保证目标行的光标起始位置和原编辑行完全一致,否则宏执行会出错
- 可以先在空白行测试宏
@a,确认效果再批量处理其他行
内容的提问来源于stack exchange,提问作者Ashwin
相关产品推荐
相关产品推荐

