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.

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)

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.


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


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í.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.