用vim替换如何实现增加?

时间:2012-01-31 08:17:17

标签: vim

我想替换下面的代码:

<input name="rating" id="rating">
<input name="rating" id="rating">
<input name="rating" id="rating">
<input name="rating" id="rating">
...
<input name="rating" id="rating">

于:

<input name="rating1" id="rating1">
<input name="rating2" id="rating2">
<input name="rating3" id="rating3">
<input name="rating4" id="rating4">
...
<input name="rating100" id="rating100">

如何通过vim替换实现增加?

谢谢!

3 个答案:

答案 0 :(得分:13)

我从一行开始:

<input name="rating1" id="rating1">

然后record a macro q q yanks the whole line y y ,{{ 3}} p pastes it below Ctrl - a increments the two numbers Ctrl - 。停止录制宏 q

然后w 98次 9 8 @ q

但是我花了太多时间玩run the macro

答案 1 :(得分:4)

假设它始终是您想要附加到“rating”一词的当前行号,您可以使用:

:%s#rating\zs#\=line(".")#g

答案 2 :(得分:1)

有一种简单有效的技术来实现基于计数器的技术 Vim中的替换。我在my answer提出了这个问题 “gVim find/replace with counter”。要理解这个想法,请参阅 回答以及我对相关问题的回答:“Using Vim, how do you use a variable to store count of patterns found?”和“CSV search and replace”。

同样,此问题中描述的问题可以通过命令

解决
:let n=[0] | %s/="rating\zs\ze"/\=map(n,'v:val+1')/g