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.Parece que Kevin tiene una respuesta bastante buena, pero si quieres ver cada línea que eliminas y reemplazarla, existe una solución ligeramente diferente.
Este tipo de receta le permite utilizar la coincidencia de patrones para buscar líneas para eliminar y reemplazar, y puede volver al inicio del archivo (1G) y buscar hacia adelante tantas veces como lo desee. Si tengo 2 o más líneas para reunir y colocar repetidamente, utilizo
"ayy
para la primera línea,"byy
para la segunda,"cyy
para la tercera, y así sucesivamente. Hice un hábito (que reduce la generalidad de la receta) para disminuir la carga mental sobre mí.fuente
"ayy
y luegodd
,dd
no reemplazará lo que está dentroa
, pero sip
lo escribo pegará lo que acaba de eliminar usandodd
. Y si quisiera reemplazar lo que está adentro"ayy
con lo que estoy borrando, entonces usaría"add
, ¿es así?Hay un par de formas de hacer esto
:s
, dependiendo de la cantidad de escritura que desee hacer. La forma más fácil es una simple búsqueda y reemplazo:El
%
buscará todo el archivo y reemplazará todas las ocurrencias.Si eso es escribir demasiado, puede tirar de la cadena de destino (
yy
) y usar el"
registro (predeterminado), insertándolo con Ctrl+r ":O, si tiene una copia de la cadena de reemplazo, puede tirar de los dos en registros separados con
"ayy
y"byy
para tirar en los registrosa
yb
, respectivamente (puede usar cualquier letra para sus registros). Luego use Ctrl+r ay Ctrl+r bpara pegarlos en los campos de búsqueda y reemplazo.No para superar a Bruce, pero si desea verificar las líneas antes de reemplazarlas, simplemente agregue la
c
opción:fuente
Puede usar
V
para resaltar la línea que desea reemplazar en modo visual y luego presionarpp
para pegar sobre esa línea.Esto solo agrega una pulsación de tecla, por lo que parece una solución bastante buena.
fuente
V
p
.Utilizo el
c
comando "cambiar" con bastante frecuencia para este tipo de cosas, combinado con la búsqueda regular. Puede buscar en el archivo cada línea / fragmento de texto que le interese y luego usarn.
comandos consecutivos (n
para el siguiente y luego.
para repetir el último cambio)./^hello
- Encuentra la línea que comienza con hola;c$goodbye
- cambiar la línea a adiós;n.
- repita buscar, repetir cambioSi desea cambiar la línea a una que ya está en el archivo, puede copiarla en su búfer de entrada (suponiendo que su GUI lo permita) y luego pegarla para obtener el contenido del primer comando de cambio.
Como con todas las cosas vi, es una buena idea tener muchas opciones en tu bolsillo, dependiendo de qué tipo de edición quieras hacer.
fuente