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?

Cuál es mi nombre
fuente

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