Eu tenho algum texto no meu buffer de colagem, por exemplo, fiz uma yw
(palavra puxada) e agora tenho 'foo' no meu buffer.
Agora vou para a palavra 'bar' e quero substituí-lo pelo meu buffer de colagem.
Para substituir o texto manualmente, eu poderia fazer cw
e digitar a nova palavra.
Como posso fazer uma 'alteração de palavra', mas usar o conteúdo do meu buffer de colar 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 quero substituir e fazer dw
(excluir palavra), depois ir para o outro lugar e fazer a yw
(palavra puxada), depois voltar para a área de substituição e fazer p
(colar), que é meio desajeitado, especialmente se eles não estiverem na mesma tela.
vep
.ve"0p
funcionaria para permitir que você repita sua alteraçãomap <C-j> ciw<C-r>0<ESC>
para que não importe de onde na palavra você pressiona^j
.:help insert
pesquise CTRL-R/CTRL-R
. Para saber comove"0p
funciona, veja:help registers
yw
para puxar sua palavra e, em seguida, mova o cursor para a palavra que você deseja substituir e use-a"_dw
para excluí-la, enviando o texto para o registro nulo (para que não sobrescreva o conteúdo do"
registro, para onde o texto arrancado / cortado é padrão) ) e, em seguida, basta colar comp
.Você pode usar o seguinte mapeamento para facilitar um pouco as coisas:
... portanto, no modo normal, você pode
\dw
excluir uma palavra sem afetar o"
registro.fonte
Para fazer isso da maneira VIM, você usa intencionalmente os registros yank, delete e outros.
Register
"0
é o registro de arranco. Qualquer coisa que você puxar será colocada aqui, mas as exclusões nunca tocam em registrar"0
.Então, no seu exemplo, você acabou de arrancar uma palavra. Para substituir uma palavra pelo que você acabou de puxar, aproveite as exclusões que nunca tocam no registro de puxões. Então vá para a palavra alvo, apague-a com
dw
e cole a partir do seu registro yank com"0p
, ou melhor ainda,cw
então^R0
(que é repetível).Um oposto ao registro de arranco é o registro de pequenas exclusões
"-
. Qualquer pequena exclusão ou remoção de alteração é colocada aqui, mas os puxões nunca se tocam"-
. Uma exclusão conta como pequena se for menor que uma linha completa.Registradores
"1
-"9
são os registros do histórico de exclusão. Com"1
a exclusão da última exclusão grande ou remoção de alterações e"9
a exclusão da exclusão grande mais antiga ou remoção de alterações. Somente exclusões que não são pequenas, ou seja, exclusões de uma linha ou mais, são pressionadas para"1
-"9
.Para qualquer operação que altera um registro, uma cópia também é sempre colocada no padrão, também conhecido como registro sem nome
""
. Este é o registro usado quando você não nomeia explicitamente um registro.Register
"_
é o registro do buraco negro e está sempre vazio. Se você excluir, nada em nenhum registro será alterado, nem mesmo o""
registro padrão ou o próprio buraco negro. O texto removido desapareceu completamente, além do histórico de desfazer. Recolher ou colar a partir do registro do buraco negro não faz essencialmente nada.O registro do buraco negro
"_
permite fazer coisas como primeiro uma exclusão pequena, depois várias outras exclusões"_
sem alterar seu registro de exclusões pequenas"-
e colar sua primeira exclusão pequena.Outros registradores são o último registro inserido
".
, o nome do arquivo"%
e"#
, o comando command":
, search search"/
e expression expression"=
.Você pode obter uma lista de todos esses registros e seus conteúdos pelo comando
:register
. Esse comando é muito útil para experimentar e aprender o que acaba onde.fonte
Eu preciso disso com tanta frequência que escrevi um plugin para simplificar e permitir a velocidade máxima: ReplaceWithRegister .
Este plug-in oferece um
gr
comando dois-em-um que substitui o texto coberto por um {motion} / objeto de texto, linha (s) inteira (s) ou a seleção atual pelo conteúdo de um registro; o texto antigo é excluído no registro do buraco negro, ou seja, foi removido. Ele lida de forma transparente com muitos casos de canto e permite uma repetição rápida através do.
comando padrão . Caso você não goste, sua página possui links para alternativas.fonte
Para repetir a colagem, use o comando change.
cw ^R0ESC (^ R = Control + R; 0 para o registro 0)
substituirá a palavra pelo conteúdo de reg. 0 e vamos repetir com.
Isso é ótimo para cgn(VIM 7.4) substituir os padrões de pesquisa:
fonte
Como ainda não está incluído, você geralmente substitui as strings por
:%s/.../.../
e também pode fazê-lo com a palavra sob o cursor.:s/find/
<ctrl-r>
e escolha com o cursor a palavra com a qual deseja substituí-la.<ctrl-w>
(palavra "pequena") ou<ctrl-a>
(palavra "grande") para colar a palavra sob o cursor na linha de comandoVeja o link sobre como usar o cursor na linha de comando .
fonte
Eu costumo usar isso: ywpara puxar
foo
, depois excluirbar
com dwe, como etapa final, colocarfoo
do registro0
que contém o texto arrancado usando "0p. Repita a colocação com ponto ( .) conforme necessário.Além disso, em vez de ywe dw, você pode usar yiwe diw(observe o extra i- significa dentro ). Com isso, você pode puxar ou excluir a palavra de qualquer local dentro dela, não apenas no início da palavra.
fonte
Eu uso este plugin para expandir a região de seleção: https://github.com/terryma/vim-expand-region
Portanto, minha combinação para alterar uma palavra será:
vvp
em qualquer lugar da palavra.Eu também tenho um truque para salvar o conteúdo do registro sem nome após colar, para que eu possa repetir isso.
(minha área de transferência é selecionada automaticamente)
fonte
Estou usando o mapeamento de teclas abaixo para substituir a palavra atual pela palavra copiada.
" replace with Register 0
map <leader>rr ciw<C-r>0<Esc>
yiwcopie uma palavra. Navegue até uma palavra. ,rrsubstitua a palavra.
A chave do líder é mapeada para ,.
fonte
,rw
faria mais sentido, e no QWERTY é provavelmente um pouquinho mais fácil e rápido de montar. No DVORAK, eu escolhi,rc
, que, embora não faça muito sentido, é mais fácil e rápido do que todos eles. No DVORAK,,rw
é um show de terror;)Primeiro, navegue até o início da palavra que deseja puxar. Se você está no meio da palavra, basta
b
voltar ao início. Em seguida, fazerye
arrancar a palavra inteira, sem espaços à direita (y
ANK parae
nd). Por fim, vá para a palavra que deseja substituir - talvez fazendow
algumas vezes - e faça ovep
para entrar nov
modo de seleção manual, selecione o númeroe
da palavra ep
aspire o último conteúdo puxado.(Se alguém quiser saber por que eu não simplesmente comentar sobre a resposta aceita, para a pequena modificação de usar
ye
, em vez deyw
, é porque minha reputação neste pilha ainda é muito baixa.)fonte
yw
para puxar o mundo, vá para o mundo que você deseja mudar.v
para selecionar o mundove
ouvw
dependendo da sua situação.p
para alterar o mundo que você copiou para substituir o bloco selecionadofonte
Adicionando às outras respostas melhores. Um pouco óbvio, mas você pode simplesmente colar antes de excluir. 'yw', em seguida, escolha a palavra que deseja substituir, 'pldw' (cole, mova um caractere para a direita, exclua a palavra.
fonte