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

awl*_*wer 5 regex vim substitution

说我有如下文字.

那个男人在走路,男人正在吃饭.

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

男人1走路,男人2正在吃饭.

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

任何帮助都是真诚的感谢; 提前致谢.

Luc*_*tte 6

你需要有一个非纯函数来计算出现次数,并使用该函数的结果.

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

:%s/man\zs/\=' '.Count()/
Run Code Online (Sandbox Code Playgroud)

  • @DawidGrabowski.我通常为这种练习提供命令和全部功能,例如http://stackoverflow.com/questions/1809571/how-do-i-ububitute-from-a-list-of-strings-in-vim/1809780 #1809780.这一次,我采取了快速而肮脏的方法 (2认同)