2012-01-24 33 views
38

Estoy ejecutando vim 7.3 en Mac 10.7.2 y tengo problemas para cortar y pegar varias líneas.Cortar y pegar varias líneas en vim

En mi configuración anterior de Linux (que fue robada, así que no sé las versiones), pude escribir "dd" varias veces y luego "p" las devolvería todas. Por ejemplo: escriba: "dd dd" y se eliminarán dos líneas. Ahora escriba "p" y ambas líneas se vuelven a pegar en el búfer.

Sé que puedo lograr lo que quiero al escribir "2dd", y luego "p" - pero me gustaría poder "dd" -out líneas sin contar el número de líneas antes de tiempo.

¿Alguna idea?

+2

no contar con líneas por delante utilizar "relativenumbers" para mostrar los números de línea en relación con el cursor. Y a partir de 7.4 establecer "números" y "números relativos" hace que el número de línea donde el cursor es absoluto y los otros relativos, obteniendo lo mejor de ambos mundos. Entonces es más fácil hacer como @Giovanni sugirió d2d (para dos líneas). –

+1

Esto es impresionante, pero para cualquiera que trate de esta realidad es el "número" y "relativenumber", no "números" y "relativenumbers" :) – user3640967

Respuesta

75

¿Ha considerado usar visual mode?

Se podía ir:

  • Prensa V
  • Seleccionar todo lo que desea cortar sin contar
  • Prensa d
  • Ir a la que desea pegar
  • Prensa p

Esto debería producir aproximadamente la mitad de teclas que el método dd, ya que presiona una tecla por línea en lugar de dos. Puntos de bonificación si usa 5j (o similar) para seleccionar varias líneas a la vez.

+9

Para líneas completas, es más fácil de usar 'V' (Shift + V). –

+0

Good one @GregHewgill, editado con su sugerencia. –

+1

Iba a decir que no quería hacer esto porque me gustaba mi antiguo flujo de trabajo. Pero, lo probé y es mucho mejor. ¡Gracias! – spinlock

5

No estoy seguro de si esto es lo suficientemente parecido a lo que está intentando, pero una cosa que podría hacer es usar un registro específico y poner en mayúscula su nombre de registro. Eso le dice a Vim para anexar al registro en lugar de reemplazarlo, por lo que si usted tiene las líneas:

one 
two 
three 

puede introducir

"qdd 
"Qdd 
"Qdd 

y, posteriormente, si se introduce

"qp 

pegará hacia atrás las líneas originales

+0

De la pregunta, parece que se asignó a 'd'. – romainl

1

Estoy de acuerdo con @Ben S. que esta es la forma preferida de Haga esto, pero si solo desea replicar su comportamiento anterior, puede reasignar dd para agregarlo a un registro especificado, y luego asignar p para pegar desde ese registro y borrarlo.
Esto tendrá la desventaja de causar que p solo funcione con cosas eliminadas usando dd (usar d} para eliminar al final del párrafo no pondría el texto en el registro correcto para pegarlo más tarde).

Añadir lo siguiente a su vimrc

noremap dd "Ddd    "Appends the contents of the current line into register d 
noremap p "dp:let @d=""<CR> "Pastes from register d and then clears it out 

si no desea pegar para borrar el contenido del registro

noremap p "dp    "Paste from register d 

pero esto causará que registrarse para crecer sin tener que limpiar fuera

2

para cortar y pegar por números de línea (ver :set number para ver los números de línea), por líneas x a y hacer:

:x,yd 

o si el cursor ya está en línea x, hacer

:,yd 

A continuación, vaya a donde quiere pegar y pulse p

13

puede escribir:

d<n>d 

donde <n> es el número de líneas que desea cortar, y luego puede pegarlas con:

p 

Por ejemplo, para cortar y pegar 3 líneas:

d3d 
p 
+0

excelente respuesta gracias – kapil

Cuestiones relacionadas