You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VsVim中使用递增序列数字替换指定值

在VsVim中实现批量递增重复值替换

这个需求用VsVim的宏(Macro)配合表达式寄存器就能轻松搞定,我给你一套精准的操作步骤:

初始化第一个数字

  1. 切换到正常模式(按Esc),搜索第一个要替换的0:输入/0并回车,光标会定位到第一个0。
  2. 将它替换为1:按r1(replace命令,直接把当前字符换成1)。
  3. 把这个1存入a寄存器备用:按"ayiw(意思是用a寄存器,复制当前光标所在的完整单词)。

录制处理一组的宏

我们要录制一个宏,用来处理后续每一组两个0的替换(比如把下两个0换成2,再下两个换成3,以此类推):

  1. 按qb开始录制宏到b寄存器(q是启动录制,b是指定存储宏的寄存器,和存数字的a寄存器分开避免冲突)。
  2. 依次执行以下操作(每一步都会被记录进宏):
    • 跳转到下一个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里了)。
  3. 停止录制宏:按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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 19:32:48