Copie, elimine y luego pegue en Vim

15

Ayer empecé con Vim y tengo problemas para entender copiar y pegar. Entiendo que copio entro en modo visual, resalto y luego tiro. Luego me muevo a la línea en la que deseo pegar, pero con mayor frecuencia no necesito eliminar algún texto de esta línea. Hago esto usando xo dw. Esto da como resultado que se sobrescriba mi copia original (como xy dwparece cortar). ¿Cómo puedo evitar esto?

Para ponerlo en un ejemplo

$foo = $this->foo->property;
thislineuses($foo);

Entonces, con el código anterior que copio $this->foo->property, me gustaría ir a la línea 2, eliminar $fooy pegar. El problema es que cuando elimino $foode la línea 2, esto es lo que se pega en lugar de $this->foo->property.

Kazark
fuente

Respuestas:

16

Echa un vistazo a :h copy-move. La extracción o eliminación predeterminada va a un lugar llamado registro (un registro denominado "). Si necesita eliminar algún texto antes de pegar, debe evitar sobrescribir el registro x, como ha descubierto. Afortunadamente, puede usar cualquier otra letra o número para nombrar un registro diferente.

  • "ayy(tirar una línea en el registro a)
  • x, dd, Etc (borre parte del texto en el registro sin nombre, ")
  • "ap(pegue el texto del registro a)
Kristo
fuente
9

Si el problema es que simplemente necesita reemplazar algunos textpor algunos text2, simplemente resalte y tire text2. Luego resalte texty presione po Ppara pegar text2en lugar de text.

Una guía rápida adicional para algunos comandos vim comunes es http://www.catswhocode.com/blog/100-vim-commands-every-programmer-should-know

¡Disfrutar!

Editar: nota que ppega el texto después del cursor y Pantes del cursor.


fuente
Esto es bueno porque no tienes que pensar en registros intermedios para tirar. Simplemente funciona.
Jon Schoning
7

Puede copiar en un registro con nombre "ayw, eliminar y luego pegar desde el registro con nombre "ap.

Sin embargo, generalmente es más fácil cambiar el orden en el que hace las cosas. Pegue y luego elimine, o elimine y luego copie / pegue.

Alternativamente, puede eliminar en el registro de agujeros negros "_d. Ver /programming//q/54255/70863

Eric Bock
fuente
3

Tiene varios registros que puede usar para mantener diferentes valores de texto. Si desea guardar el texto en un registro diferente de donde irá el texto eliminado (es decir, usando xo d w), use lo siguiente:

Para guardar texto en el registro a:

  • presione " a[comando de tirar y mover] (guarda el texto en el registro a)
  • ve a donde quieres pegar el texto
  • presione " a p(pegar texto desde el registro a)

Puede usar un registro para cada una de las letras en el teclado y cada número. La eliminación de texto no usará esos registros, por lo que el texto permanecerá en el registro hasta que finalice su sesión o coloque manualmente algo más allí.

Jason Down
fuente
0

No tiene que resaltar toda la línea si usa el modo visual v(en lugar de V). Si eso es lo que estás pidiendo.

Si está hablando de modificar el texto copiado, primero copie y borre las partes.

Y si desea copiar, luego modifique el original y luego péguelo, luego puede tirar a otro registro. Me gusta "2y, luego modificar, luego ir a otro lado y "2p.

Michael Krelin - hacker
fuente