vim:搜索替换为递增计数器

vim:搜索替换为递增计数器,vim,Vim,我想做的是执行一个搜索替换模式,该模式将包括一个计数器,它跟踪已进行的替换的数量并对其进行编号 这里有一个例子。假设我有一个以下结构的代码块: if (condition1(value)): array.push(value) elseif (condition2(value)): array.push(modified(value)) elseif (condition3(value)): array.pop(value) 但假设有50个条件。我想在每个push或pop上方放置一

我想做的是执行一个搜索替换模式,该模式将包括一个计数器,它跟踪已进行的替换的数量并对其进行编号

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

if (condition1(value)):
  array.push(value)
elseif (condition2(value)):
  array.push(modified(value))
elseif (condition3(value)):
  array.pop(value)
但假设有50个条件。我想在每个
push
pop
上方放置一个debug print语句,这样我就可以看到它运行时发生了什么。我可以用
:%s/^\(\s\+\)\(array.p\)/\1print“DEBUG”\r\1\2/g
,将相同的语句放在每个语句之前,但这没有帮助,因为打印都是相同的

我想在第一个匹配之前放置
print“DEBUG 1”
,在第二个匹配之前放置
print“DEBUG 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