我写了一个网页的一部分,其中包含以下内容......
<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>
Run Code Online (Sandbox Code Playgroud)
然后我意识到它应该从14到0编号,而不是1到15.(是的,我的设计不好,而不是先计划好JavaScript.)
题.在vim中有一个简单的方法来对正则表达式中的数字进行数学运算吗?我想要做的是搜索文本"item [00-99]",并让它返回文本"item(15-original number)"
搜索似乎很容易 - /item([0-9] [0-9])/(用于将找到的数字放入缓冲区的括号),但是甚至可以对此进行数学运算吗?
用于在vim中编号的列表的宏?给出了一种从头开始编号的方法,但我正在寻找一种重新编号的方法.
Mar*_*rth 10
:%s/item\zs\d\+/\=15 - submatch(0)/
Run Code Online (Sandbox Code Playgroud)
会做你想做的.
打破它:
item\zs\d\+:匹配后item的数字(\zs表示匹配的开头)\=:表示替换是一个表达式15 - submatch(0):返回15减去匹配的数字另一种有趣的方法是使用g<CTRL-a>(:help v_g_CTRL-A了解更多信息)
从...开始
<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>
Run Code Online (Sandbox Code Playgroud)
使用视觉块模式将所有数字重置为00:
<CTRL-V>选择所有号码r0将所有数字替换为零你应该被看到:
<span id="item00"> some first presented text</span>
<span id="item00"> some other text, presented second</span>
<span id="item00"> more text</span>
....
<span id="item00"> last bit of text.</span>
Run Code Online (Sandbox Code Playgroud)
现在恢复您的块选择gv或仅选择所有行V并按g<CTRL+a>
<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="item015"> last bit of text.</span>
Run Code Online (Sandbox Code Playgroud)
不幸的是,这里需要进行最后一次清理。正如您所看到的,所有两位数字都位于0前面。再次使用视觉块模式<CTRL+v>选择并删除不需要的零。
<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>
Run Code Online (Sandbox Code Playgroud)
现在你已经完成了:)