regex - 如何在vim中重新编号列表?

标签 regex math vim

我写了一部分网页,内容如下:

<span id="item01">   some first presented text</span>
<span id="item02">   some other text, presented second</span>
<span id="item03">   more text</span>
....
<span id="item15">  last bit of text.</span>

然后,我意识到应该将它从14编号为0,而不是从1编号为15。(是的,我的设计不好,不打算首先设计JavaScript。)

问题。 vim中有没有一种简单的方法可以对正则表达式中的数字进行数学运算?我想做的是搜索文本“item [00-99]”,并使其返回文本“item(15-原始数字)”

搜索似乎很容易-/item([0-9] [0-9])/
(用圆括号将找到的数字放入缓冲区),但是甚至可以对此进行数学运算吗?
Macro for making numbered lists in vim?提供了一种从头开始编号的方法,但是我正在寻找一种重新编号的方法。

最佳答案

:%s/item\zs\d\+/\=15 - submatch(0)/

会做你想要的。
分解:
  • item\zs\d\+:item之后的匹配数字(\zs表示比赛的开始)
  • \=:指示替换是一个表达式
  • 15 - submatch(0):返回15减去匹配的
  • 关于regex - 如何在vim中重新编号列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32777172/

    相关文章:

    c++ - 正则表达式帮助,匹配产生额外的空格

    regex - R 正则表达式 : http matching

    java - java中的基准测试是否适合比较模算术运算?

    Javascript Circle slider 度数到时间

    excel - 幂法 - 非收敛系统

    cross-platform - 每个 vimrc 跨平台解决方案的优缺点?

    python - 如何在 vim 中删除标签高亮

    java - 将特定行上的数字分配给变量

    具有可选扩展名的 C++11 正则表达式捕获文件名

    vim auto-pairs remove/umwrap pair of brackets