En Vim, ¿cómo puedo copiar desde varias líneas? (no es un rango);


20

Supongamos que tengo

1 - funct1
2- funct 2
3 - funct 3 
4 line 4

¿Cómo puedo copiar la línea 1 y 3 (no un rango de líneas) y pegarlas, por ejemplo en la línea 8? Si hago esto de la misma manera que |arg like ( 1y|3y), tiraría de líneas a varios registros, ¿verdad? Pero, ¿cómo puedo poner de varios registros a la vez?

Respuestas:


33

Puede agregar un registro en lugar de borrarlo utilizando la letra mayúscula en lugar de la minúscula.

Por ejemplo:

:1y a      # copy line 1 into register a (erases it beforehand)
:3y A      # copy line 3 into register a (after its current content)
8G  # go to line 8
"ap        # print register a

1
También puede hacer esto en modo normal con "ayyjj"Ayy"ap.
wchargin

55
(o 1G"ayy3G"Ayy8G"appara números de línea explícitos)
wchargin

1
¿No es solo Gpara ir a la línea, no <C-G>?
David

1
Esto es genial. Puede seguir agregando tantas cosas al búfer Acomo desee y lo mantendrá todo. Para comenzar de nuevo, ponga algo en el registroa
CornSmith

1
@CornSmith Nitpick: buffer es un término muy específico en el contexto de vim. "aes un registro .
Pomo

1

Puede usar el :copycomando, que puede abreviarse como :t:

:1t8
:3t8

Si desea copiar un rango de líneas (por ejemplo, todas las líneas de 1 a 3), puede hacerlo así:

:1,3t8

Quiero copiar líneas por número, pero no una GAMA DE LÍNEAS ... ¿Puedo agregar algo como el comando t a la línea?
Cuál es mi nombre?

0
1Gyy7Gp #use 7 if you wish to paste the line at 8
3Gyy8Gp #use 8 if you wish to paste the line at 9

Estos se pueden expresar mejor con el :tcomando, que tampoco borra los registros "o 0.
Pomo
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.