Por padrão, os comandos de colar usam o "registro ("sem nome") . Efetivamente, qualquer comando que grava em um registro também grava no registro sem nome, portanto, puxa, exclui e altera tudo o afeta. É por isso que sua sequência de arrancar-excluir-colar cola o texto excluído em vez do texto arrancado.
O 0registro pode ajudar aqui. Qualquer comando de arranque que não especifique um registro coloca o texto arrancado no registro 0(além de "). Ele não é afetado pelas operações de exclusão ou alteração, portanto, você pode usá-lo para colar uma linha arrancada várias vezes, mesmo se você fizer exclusões ou alterações intermediárias.
yy: Registros 0e "ambos agora têm a linha arrancada.
- Mover para uma linha para substituir.
dd: O registro "agora tem a linha excluída, mas o registro 0ainda tem a linha arrancada.
"0P: Cole a linha originalmente arrancada do registro 0.
- Vá para a próxima linha para substituir.
dd"0P (o mesmo que acima)
(Devido à maneira como o posicionamento do cursor funciona ao substituir a última linha de um buffer, você desejará usar em "0pvez de "0P.)
Isso está muito próximo da resposta de Bruce Ediger , exceto que você não precisa especificar um registro ao puxar inicialmente. O uso de um ou mais registradores nomeados pode ser muito útil, se você precisar (por exemplo) substituir algumas linhas por AAA, mas outras por BBB(colocar AAAno registro ae BBBno registro b(ou deixar um deles no registro 0) e colá-las de acordo )
Você também pode colar a partir 0no modo visual linha-wise ( V) para salvar uma combinação de teclas: V"0p.
Se você não gosta de digitar "0, pode achar um mapeamento mais conveniente:
noremap <Leader>p "0p
noremap <Leader>P "0P
vnoremap <Leader>p "0p
Uma abordagem alternativa é excluir o _registro ("blackhole") . Quando você o exclui, o "registro não é afetado; portanto, sua sequência de arrancar-excluir-colar ainda pode colar o texto arrancado do registro sem nome.
yy: Registre-se 0e "agora ambos têm a linha arrancada.
"_dd: Nenhuma alteração nos registros.
P: Cole o texto originalmente arrancado do registro ".
Novamente, você pode achar um mapeamento mais conveniente:
noremap <Leader>d "_d
yy(vá para a linha a ser substituída)S<C-r>0<Esc>. Tem a vantagem de ser repetível com o.comando