在 vi 中搜索并替换接下来的 n 个单词

在 vi 中搜索并替换接下来的 n 个单词

可能的重复:
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,点击yn 次,然后点击q, :%s/hello/second/gc, ym 次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

相关内容