是否可以用vim中的n标记第n次出现的模式?

时间:2016-08-29 04:23:41

标签: regex vim substitution

说我有如下文字。

  

男人正在走路,男人正在吃饭。

我应该如何使用替换将其转换为以下内容?

  

男子1正在走路,男子2正在吃饭。

我知道我可以使用:%s/\<man\>//gn来计算单词man的出现次数,我知道/\%(\(pattern\).\{-}\)\{n - 1}\zs\1可以找到第n次出现的模式。但是我如何标记第n次出现?

真心感谢任何帮助;提前谢谢。

2 个答案:

答案 0 :(得分:6)

您需要使用非纯函数来计算出现次数,并使用该函数的结果。

" untested
let s:count = 0
function! Count()
    let s:count += 1
    return s:count
endfunction

:%s/man\zs/\=' '.Count()/

答案 1 :(得分:2)

你可以用宏来做到这一点。 首先,搜索模式,如/man /e

让我们为计数创建一个变量,例如:let cnt=1

现在,让我们清除a注册表。

qa开始录制。

n

i,然后按Ctrl + R键入=。输入cnt。计数值插入那里。 然后,输入:let cnt=cnt+1

按Escape键。

q停止注册。

现在,输入:%s/man //gn以获取出现次数。

现在,你知道发生的次数,比如10.然后,你会按10@a。 所有出现的事件都将附加一个数字,该数字会在每次出现时递增。