Por padrão, os comandos "colar" usam o registro " ("sem nome") . Efetivamente, qualquer comando que grava em um registrador também grava no registrador sem nome, de modo que os puxões, exclusões e mudanças afetam-no. É por isso que sua sequência de copiar e excluir colar cola o texto excluído em vez do texto arrancado.
O 0 register pode ajudar aqui. Todos os comandos que não especificam um registrador colocam o texto arrancado no registro 0 (além de " ). Ele não é afetado por operações de exclusão ou alteração, portanto, você pode usá-lo para colar uma linha arrancada várias vezes, mesmo que faça exclusões ou alterações intermediárias.
-
yy: os registros0e"agora têm a linha removida. - Mover para uma linha para substituir.
-
dd: Registrar"agora tem a linha excluída, mas o registro0ainda tem a linha de yanked.
"0P: Cole a linha originalmente retirada do registro0. - Mover para a próxima linha a substituir.
-
dd"0P(o mesmo que acima)
(Devido à maneira como o posicionamento do cursor funciona ao substituir a última linha de um buffer, você vai querer usar "0p em vez de "0P .)
Isso está muito próximo da resposta de Bruce Ediger , exceto que você não precisa especificar um registro quando inicialmente arrancando. O uso de um ou mais registradores nomeados pode ser muito útil, entretanto, se você precisar (por exemplo) substituir algumas linhas por AAA , mas outras linhas com BBB (colocar AAA no registro a e BBB in registre b (ou deixe um deles no registro 0 ), depois cole-os de acordo.
Você também pode colar 0 no modo visual de linha ( V ) para salvar um pressionamento de tecla: 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 _ ("blackhole") registro . Quando você exclui para ele, o " register não é afetado, então sua seqüência de yank-delete-paste ainda pode colar o texto arrancado do registrador sem nome.
-
yy: Registre0e"ambos agora têm a linha arrancada. -
"_dd: nenhuma alteração nos registradores.
P: cole o texto originalmente retirado do registro".
Novamente, você pode achar um mapeamento mais conveniente:
noremap <Leader>d "_d