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 registros0
e"
agora têm a linha removida. - Mover para uma linha para substituir.
-
dd
: Registrar"
agora tem a linha excluída, mas o registro0
ainda 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
: Registre0
e"
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