2017-08-01 43 views
1

我想要做的是执行一个搜索替换模式,它将包含一个计数器,它跟踪它所做的替换次数并对它们进行编号。vim:搜索用增量计数器替换

下面是一个例子。假设我有以下结构的代码块:

if (condition1(value)): 
    array.push(value) 
elseif (condition2(value)): 
    array.push(modified(value)) 
elseif (condition3(value)): 
    array.pop(value) 

但假装有50个条件。我想在每个pushpop上面放一个调试打印语句,以便我可以看到它在运行时发生了什么。我可以在:%s/^\(\s\+\)\(array.p\)/\1print "DEBUG"\r\1\2/g之前在每一个前面加上相同的陈述,但这没有什么帮助,因为印刷品都是一样的。

我想要的是在第一场比赛之前放置print "DEBUG 1",第二场之前放置print "DEBUG 2",但为了做到这一点,我需要一些类型的计数器。

回答

2
:let i = 0|g/\(push\|pop\)/let i = i + 1|put!='print \"DEBUG ' . i . '\"' 

说明:

let i = 0       define a control variable 

g/\(push\|pop\)/     mark all lines containing 'push' or 'pop' 
            then execute what follows on each marked line 

let i = i + 1      increment the control variable 

put!='print \"DEBUG ' . i . '\"' put the debugging statement above 

:help :global:help :let:help :put