Editar a ocorrência Nth interativamente em uma pesquisa no vim

3

Dado um texto com várias ocorrências da palavra foo , eu gostaria de fazer uma pesquisa interativa através do texto, e após a enésima ocorrência de foo , edite-a.

Eu só consigo encontrar os padrões search and replace para esse tipo de ação, mas o ponto é que não quero editar todas as ocorrências de foo , apenas a que encontrei em algum contexto.

    
por Steen 21.01.2015 / 10:10

5 respostas

4

Se eu leio você corretamente:

  1. Pesquisar

    /foo Digite

  2. Próximo por n

  3. "Oh, esse eu quero excluir"
    • d w
  4. Continue em n
  5. "Ah, esse eu quero mudar para bar "
    • c w bar Esc
  6. Continue em n ...
  7. "Ah, esse eu quero mudar para baz "
    • c w baz Esc
  8. Continue em n ...

Editar / Correção:

Por conveniência, acrescentei:

imap <C-d> <ESC>

para .vimrc - esqueceu-se disso e achou que era um mapeamento padrão. Corrigido.

    
por 21.01.2015 / 11:01
5

Você pode usar c flag ao fazer pesquisar e substituir :

:%s/foo/bar/gc

Sempre que vim for encontrado foo , solicitará yes/no para confirmar a substituição ou não.

Ou se você quiser pesquisar pela enésima ocorrência de foo , você pode:

n/foo

Então, vim pulará para a enésima ocorrência de foo , para que você decida substituir ou não.

    
por 21.01.2015 / 10:14
1

Para a opção normal de pesquisa e substituição em vim , você pode usar a opção de confirmação passando gc , por exemplo.

Por exemplo, se você quiser substituir a palavra foo por bar , adicione a linha abaixo

:%s/foo/bar/gc

Por isso, sempre que encontrar a ocorrência da palavra foo , pede a confirmação da substituição da palavra bar .Se premir y , será substituído e n , pelo não.

    
por 21.01.2015 / 10:23
0

você pode usar uma pesquisa global 'g' para qualificar quais linhas você deve substituir em

:g/qualifyingregexp/s/foo/bar/igc

para restringir ainda mais você pode especificar marcadores

:'a,'bg/qualifyingregexp/s/foo/bar/igc
    
por 21.01.2015 / 14:56
0

Você pode repetir muitos comandos em vim digitando primeiro o número com que frequência eles devem ser repetidos. Isso também funciona para o comando n .

Para alterar, p. a 9ª ocorrência de foo type

  1. digite /foo Digite para ir para o primeiro local de foo
  2. digite 8n para pular oito vezes para o próximo local. Então você está na nona ocorrência
  3. digite cw para alterar a palavra e digite a nova palavra.

Você pode continuar as etapas 2 e 3., conforme descrito em esta resposta

    
por 21.01.2015 / 16:24