Como substituir cada ocorrência de uma string por um contador de incremento no vim?

2

Eu tenho 203 instâncias da palavra ubuntu em um arquivo, e quero substituir cada uma com UBUNTU_X , onde "X" é um contador de incremento. Em outras palavras, o arquivo original é:

ubuntu xxxxxxxx ubuntu xxxxxxxx ubuntu xxxubuntuxxx xxxubuntu ubuntuxxxxxx ...

E quero substituí-lo por:

UBUNTU_1 xxxxxxxx UBUNTU_2 xxxxxxxx UBUNTU_3 xxxUBUNTU_4xxx xxxUBUNTU_5 UBUNTU_6xxxxx ... 

A última ocorrência deve ser UBUNTU_203

    
por jayesh 26.09.2015 / 17:31

2 respostas

2

ggOUbuntu_0 Esc 0"ndeddqq/\<Ubuntu\>^Mde"nP^Ab"nyeq999@q

Isso deve fazer o que você quiser se for digitado no modo normal.

Explicação:

  • gg - vai para a primeira linha do arquivo
  • O - cria uma nova linha acima da linha atual e entra no modo de inserção
  • Ubuntu_0 - digitando texto
  • Esc - sai do modo de inserção, também pode usar Ctrl [
  • 0 - vai para o início da linha atual
  • "nde - no registro n, delete no final da palavra
  • dd - apaga a linha atual
  • qq - inicia a gravação da macro no registro q
  • /\<Ubuntu\>^M - procure pelo Ubuntu. \ < e \ > significa limites de palavras e Ctrl-M é o mesmo que pressionar Enter.
  • de - delete para o final da palavra
  • "nP - coloca o conteúdo do registrador n antes da posição do cursor
  • ^A - Ctrl-A, incrementa o número sob o cursor em um
  • b - vai para o início da palavra atual
  • "nye - no registro n texto arrastado até o final da palavra atual
  • q - parar de gravar macro
  • 999@q - executa a macro gravada no registro q 999 vezes (ou pára quando o padrão \<Ubuntu\> não é mais encontrado)

Isso pode ser modificado, dependendo dos seus requisitos exatos. Por exemplo, eu assumi que você só quer combinar "Ubuntu" como uma palavra inteira. Eu também suponho que você queira apenas combinar a capitalização dada - ou, se você tiver ignorado, que você não se importa com as várias capitalizações do "ubuntu" sendo todas transformadas em "Ubuntu".

    
por 28.09.2015 / 09:35
1

Várias distribuições linux têm o vim compilado com suporte a Perl. Se este for o caso, você tem um :perldo command e um :perl command

:perldo  s/ubuntu/"UBUNTU" . ++$a/ge 
    
por 29.09.2015 / 15:26

Tags