Procura e substitui as próximas n palavras no vi [duplicado]

5

No vi, como pesquiso e substituo as primeiras n ocorrências de uma palavra por uma palavra, digamos "hello", e as próximas m ocorrências com bonjour , e todo o resto com namaste ?

    
por varchar1 24.01.2012 / 03:19

3 respostas

0

Você consegue localizar o enésimo "olá" manualmente? Em caso afirmativo, localizaria o enésimo olá da seguinte forma:

:1 (goes to the first line of your file)
n/hello (find the nth hello, where n is the number)

Em seguida, substitua todos os hellos da seguinte forma:

:1,.s/hello/bonjour/g
(move to the next line)
:.,$s/hello/namaste/g
    
por 24.01.2012 / 13:42
0

Isso basicamente se resume ao mesmo que a minha pergunta (ligada nos comentários; como mencionado, a minha pergunta sobre uma única linha, mas é trivialmente generalizada para mais). A resposta mais fácil é :%s/hello/first/gc ,% hit y vezes e q , :%s/hello/second/gc , y m vezes e q , etc. Se precisar de mais do que alguns, use feedkeys e repeat , conforme descrito na resposta aceita lá.

    
por 14.02.2012 / 03:26
0
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

antes

word
word
word
word
word
word
word

depois de

hello
hello
bonjour
bonjour
bonjour
namaste
namaste
    
por 14.02.2012 / 16:51

Tags