如何在VsVim中使用递增序列数字替换指定值
在VsVim中实现批量递增重复值替换
这个需求用VsVim的宏(Macro)配合表达式寄存器就能轻松搞定,我给你一套精准的操作步骤:
初始化第一个数字
- 切换到正常模式(按
Esc),搜索第一个要替换的0:输入/0并回车,光标会定位到第一个0。 - 将它替换为
1:按r1(replace命令,直接把当前字符换成1)。 - 把这个
1存入a寄存器备用:按"ayiw(意思是用a寄存器,复制当前光标所在的完整单词)。
录制处理一组的宏
我们要录制一个宏,用来处理后续每一组两个0的替换(比如把下两个0换成2,再下两个换成3,以此类推):
- 按
qb开始录制宏到b寄存器(q是启动录制,b是指定存储宏的寄存器,和存数字的a寄存器分开避免冲突)。 - 依次执行以下操作(每一步都会被记录进宏):
- 跳转到下一个
0:按n。 - 粘贴
a寄存器里的数字替换当前0:按p(光标在0上时,p会直接覆盖当前字符)。 - 跳转到下一个
0:按n。 - 粘贴
a寄存器里的数字替换当前0:按p。 - 更新
a寄存器的数字为下一个递增数:按"a<C-r>=a+1<CR>(解释:"a指定目标寄存器,<C-r>=唤起表达式寄存器,输入a+1让寄存器值自动加1,按回车确认后新数字就存在a里了)。
- 跳转到下一个
- 停止录制宏:按
q。
执行宏批量处理
现在只要重复执行宏就能处理剩下的所有组:
- 按
@b执行一次宏,这会把接下来的两个0替换成2,同时a寄存器的值自动变成3。 - 要处理更多组,按
@@就能重复上一次的宏操作;如果知道剩下的组数,比如还剩2组,直接输入2@b就能一次性完成。
完成后你的代码会变成:
std::map<std::string, int> monthMap = { {"Jan", 1}, {"Janurary", 1}, {"Feb", 2}, {"February", 2}, {"Mar", 3}, {"March", 3} };
内容的提问来源于stack exchange,提问作者io888
相关产品推荐
相关产品推荐

