可能的重复:
Vim :s 替换一行中前 N < g 次出现
在 vi 中,如何搜索并替换单词第一次n
出现的单词,说“hello”,接下来m
出现的单词替换为bonjour
,其余所有单词替换为namaste
?
答案1
你能手动找到第n个“hello”吗?如果是这样,那么我将按如下方式找到第 n 个 hello:
:1 (goes to the first line of your file)
n/hello (find the nth hello, where n is the number)
然后将所有的 hello 替换如下:
:1,.s/hello/bonjour/g
(move to the next line)
:.,$s/hello/namaste/g
答案2
这基本上可以归结为与我的问题相同(在评论中链接;如前所述,我的问题询问一行,但一般会概括为更多)。最简单的答案是:%s/hello/first/gc
,点击y
n 次,然后点击q
, :%s/hello/second/gc
, y
m 次q
,等等。如果您需要多次,请使用 feedkeys
和 ,repeat
如已接受的答案中所述。
答案3
fun! FUN(n, m)
if !exists('g:count')
let g:count = 0
endif
let g:count+=1
if g:count<=a:n
return 'hello'
elseif g:count<=a:n+a:m
return 'bonjour'
else
return 'namaste'
endif
endfun
:unlet! g:count
:%s/word/\=FUN(2, 3)/g
前
word
word
word
word
word
word
word
后
hello
hello
bonjour
bonjour
bonjour
namaste
namaste