vim - como posso fazer uma 'mudança de palavra' usando o atual buffer de colar

66

Eu tenho algum texto no meu buffer de pasta, por exemplo Eu fiz um yw (palavra yank) e agora eu tenho 'foo' no meu buffer.

Agora vou para a palavra 'barra' e quero substituí-la pelo meu buffer de pasta.

Para substituir o texto manualmente, pude fazer cw e digitar a nova palavra.

Como posso fazer uma 'alteração de palavra', mas usar o conteúdo do meu buffer de pasta em vez de digitar manualmente a palavra de substituição?

A melhor opção que tenho agora é ir para o início da palavra que eu quero substituir e fazer dw (delete word), então vá para o outro lugar e faça o yw (palavra do yank), em seguida, volte para a área de substituição e execute p (colar), o que é meio desajeitado, especialmente se eles não estiverem na mesma tela.

    
por Michael Durrant 29.08.2013 / 16:45

10 respostas

79

Opção 1

Você poderia usar registradores para fazer isso e fazer um atalho para o processo.

Arranque a palavra que você deseja substituir por yw .

A palavra "yanked" está no registro 0 , que você pode ver emitindo :registers .

Vá para a palavra que você deseja substituir e faça cw . Faça Ctrl + r seguido de 0 para colar o registro 0 .

O mapa para isso seria algo como isto (assumindo Ctrl + j como nosso combo de teclas):

:map <C-j> cw<C-r>0<ESC>

Opção 2 (mais simples)

Com a palavra yanked, passe o cursor sobre a palavra que deseja substituir e faça v i w p . Qual é a palavra interna de seleção visual e cole.

Cortesia de @tlo nos comentários: você também poderia fazer v e p . Um char mais curto. O lado negativo tem que posicionar o cursor no início da palavra e (como com o meu) altera o buffer.

Comentário (de Michael):

Isso é bom. Nota extra: o segundo método é realmente mais fácil, mas, como é, só funciona para UMA substituição, porque após cada substituição o buffer é alterado para o campo que foi substituído (texto antigo). O primeiro método é um pouco mais difícil de usar, mas tem a vantagem de que o buffer 0 permanece 'como está', então você pode usar esse método para fazer mais de uma substituição do mesmo texto.

    
por 29.08.2013 / 17:04
9

yw para extrair sua palavra, mova o cursor para a palavra que deseja substituir e use "_dw para excluí-la, enviando o texto para o registrador nulo (para que não sobrescreva o conteúdo da " register, onde o texto yanked / cut passa por padrão), e então simplesmente cole com p .

Você pode usar o seguinte mapeamento para facilitar um pouco as coisas:

nnoremap <leader>d "_d

... portanto, no modo normal, você pode usar \dw para excluir uma palavra, sem afetar o " register.

    
por 29.08.2013 / 21:45
2

Preciso disso com muita frequência, escrevi um plug-in para simplificar e permitir velocidade máxima: ReplaceWithRegister .

Este plugin oferece um comando two-in-one gr que substitui o texto coberto por um objeto {motion} / text, linha (s) inteira (s) ou a seleção atual pelo conteúdo de um registrador; o texto antigo é apagado no registo do buraco negro, ou seja, desapareceu. Ele manipula de forma transparente muitos casos de canto e permite uma repetição rápida por meio do comando padrão . . Caso você não goste, sua página tem links para alternativas.

    
por 01.10.2013 / 11:19
2

Para repetir a colagem, use o comando de alteração.

cw ^ R 0 ESC (^ R = Controle + R; 0 para registrador 0)

substituirá a palavra pelo conteúdo do reg. 0 e vamos repetir com .

Isso é ótimo para cgn (VIM 7.4) substituir padrões de busca:

  • Primeira pesquisa com / ou *
  • cgn ^ R 0 ESC
  • . para repetir na próxima partida ou n para pular
por 22.12.2016 / 11:48
1

Como ainda não está incluído, você geralmente substitui as strings por :%s/.../.../ e também pode fazer isso com a palavra sob o cursor.

  1. Você insere a primeira parte do comando, o que você está procurando: :s/find/
  2. Em seguida, você clica em <ctrl-r> e escolhe com o cursor a palavra com a qual deseja substituí-lo.
  3. Em seguida, você clica em <ctrl-w> (pequena "palavra") ou <ctrl-a> (palavra "grande") para colar a palavra sob o cursor na linha de comando
  4. Então você termina o comando.

Veja o link sobre como usar coisas do cursor na linha de comando .

    
por 18.04.2017 / 10:20
1

Eu costumo usar isto: yw para arrancar foo , depois deletar bar com dw , e como etapa final, colocar foo do registrador 0 que contém texto arrancado usando "0p . Repita colocando com período (. ) conforme necessário.

Além disso, ao invés de yw e dw , você pode usar yiw e diw (observe o extra < kbd> i - significa dentro ). Com isso, você pode arrancar ou deletar a palavra de qualquer lugar dentro , não apenas no começo da palavra.

    
por 09.11.2017 / 13:04
0

Eu uso este plugin para expandir a região de seleção: link

Portanto, minha combinação para alterar uma palavra será: vvp em qualquer lugar de uma palavra.

Eu também tenho um hack para salvar o conteúdo do registro sem nome depois da pasta para que eu possa repetir isso.

vnoremap p p:let @"=@0 <CR>
vnoremap P P:let @"=@0 <CR>

(minha área de transferência é autoselect)

    
por 07.09.2017 / 11:18
0

Estou usando o mapeamento de chave abaixo para substituir a palavra atual pela palavra copiada.
" replace with Register 0
map <leader>rr ciw<C-r>0<Esc>

y i w copia uma palavra. Navegue até uma palavra. , r r substitui a palavra.
A chave do líder é mapeada para , .

    
por 28.02.2018 / 11:11
0

Primeiro, navegue até o início da palavra que você deseja puxar. Se você estiver no meio da palavra, basta fazer b para voltar ao início. Então, faça ye para arrancar a palavra inteira, sem nenhum espaço à direita ( y ank para e nd). Por fim, vá para a palavra que deseja substituir, talvez fazendo w algumas vezes, e execute um vep para entrar no modo de seleção v , selecione a e nd da palavra e p aste o conteúdo passado yanked.

(Se alguém quiser saber por que eu simplesmente não comentei a resposta aceita, pela pequena modificação de usar ye em vez de yw , é porque minha reputação nessa pilha ainda é muito baixa.)

    
por 05.04.2018 / 20:52
0
  1. use yw para conquistar o mundo e ir para o mundo que você deseja mudar.
  2. use v para selecionar o mundo, ve ou vw dependendo da sua situação.
  3. insira p para passar o mundo que você copiou para substituir o bloco selecionado
por 24.08.2018 / 04:09