Aproveitando a ideia de :s/pattern/replacement/gc
de Samus_ (que parece ser a maneira mais simples de garantir a operação correta quando o padrão está contido na string de substituição), para substituir a segunda a quarta ocorrências em uma única linha:
:call feedkeys("nyyyq") | s/pat/string/gc
feedkeys()
é uma função que insere a cadeia de entrada na fila de entrada do teclado. O objetivo é fazer a contagem adiantada para que você não tenha que se preocupar em perder ou ser interrompido.
Para um caso mais geral, substituir o Mth por meio de Nth ocorrências em uma única linha para N maior ou igual a um muito grande M :
:call feedkeys(repeat("n", M-1) . repeat("y", N-M+1) . "q") | s/pat/string/gc
Substitua M e N pelos valores desejados (você pode até mesmo deixar vim
fazer a aritmética mental trivial se não quiser fazer isso sozinho) . Observe que .
é o operador de concatenação de cadeias de caracteres do VimL. Obviamente, isso só salva as teclas digitadas para grandes M . Se você usar essa funcionalidade com freqüência, poderá poupar tempo para colocar o acima em um comando personalizado ou função de algum tipo, pois é um pouco para digitar.