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 0
registro 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 0
e "
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 0
ainda 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 "0p
vez 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 AAA
no registro a
e BBB
no registro b
(ou deixar um deles no registro 0
) e colá-las de acordo )
Você também pode colar a partir 0
no 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 0
e "
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