说我有如下文字。
男人正在走路,男人正在吃饭。
我应该如何使用替换将其转换为以下内容?
男子1正在走路,男子2正在吃饭。
我知道我可以使用:%s/\<man\>//gn
来计算单词man
的出现次数,我知道/\%(\(pattern\).\{-}\)\{n - 1}\zs\1
可以找到第n次出现的模式。但是我如何标记第n次出现?
真心感谢任何帮助;提前谢谢。
答案 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
。
所有出现的事件都将附加一个数字,该数字会在每次出现时递增。