Por defecto, los comandos de pegar usan el "
registro ("sin nombre") . Efectivamente, cualquier comando que escriba en un registro también escribe en el registro sin nombre, por lo que los cambios, las eliminaciones y los cambios lo afectan. Esta es la razón por la cual su secuencia yank-delete-paste pega el texto eliminado en lugar del texto eliminado.
El 0
registro puede ayudar aquí. Cualquier comando de extracción que no especifique un registro coloca el texto extraído en el registro 0
(además de "
). No se ve afectado por las operaciones de eliminación o cambio, por lo que puede usarlo para pegar una línea arrancada varias veces, incluso si realiza eliminaciones o cambios intermedios.
yy
: Los registros 0
y "
ambos ahora tienen la línea arrancada.
- Mover a una línea para reemplazar.
dd
: Registrarse "
ahora tiene la línea eliminada, pero registrarse 0
todavía tiene la línea arrancada.
"0P
: Pegue la línea originalmente arrancada del registro 0
.
- Mover a la siguiente línea para reemplazar.
dd"0P
(lo mismo que arriba)
(Debido a la forma en que funciona el posicionamiento del cursor al reemplazar la última línea de un búfer, querrá usar en "0p
lugar de "0P
).
Esto está muy cerca de la respuesta de Bruce Ediger , excepto que no es necesario especificar un registro cuando se tira inicialmente. Sin embargo, usar uno o más registros con nombre puede ser muy útil si necesita (por ejemplo) reemplazar algunas líneas con AAA
, pero otras líneas con BBB
(poner AAA
en el registro a
y BBB
en el registro b
(o dejar uno de ellos en el registro 0
), luego pegarlos en consecuencia )
También puede pegar desde 0
el modo visual de línea sabio ( V
) para guardar una combinación de teclas: V"0p
.
Si no le gusta tener que escribir "0
, puede encontrar una asignación más conveniente:
noremap <Leader>p "0p
noremap <Leader>P "0P
vnoremap <Leader>p "0p
Un enfoque alternativo es eliminar el _
registro ("agujero negro") . Cuando lo borra, el "
registro no se ve afectado, por lo que su secuencia yank-delete-paste todavía puede pegar el texto arrancado del registro sin nombre.
yy
: Regístrese 0
y "
ambos ahora tienen la línea arrancada.
"_dd
: Sin cambios en los registros.
P
: Pegue el texto originalmente arrancado del registro "
.
Nuevamente, puede encontrar una asignación más conveniente:
noremap <Leader>d "_d
yy
(mover a la línea para ser reemplazado)S<C-r>0<Esc>
. Tiene la ventaja de ser repetible con el.
comando.