¿Cómo tirar de una línea en particular sin mover el cursor en vim?

40

Por ejemplo

texto alternativo

¿Cómo puedo tirar y pegar la Línea 4 solo en la Línea 12 sin tener que mover el cursor a la Línea 4?

texto alternativo

Lazer
fuente
Respondí tu pregunta sobre la base del hecho de que "¡tira de mí! está en la línea 4. En su segunda captura de pantalla, aparece en la línea 5.
Louis Salin
Gracias @Louis por la respuesta. He actualizado la captura de pantalla.
Lazer

Respuestas:

52

Si el cursor ya está en la línea 12, entonces un simple

: 4 años
PAGS

lo hace por mi

precioso
fuente
1
¡Agradable! ¿Hay un equivalente para x? Cuando lo intento :4xconsigo E140: Use ! to write partial buffer. ¡Gracias!
dotancohen
Tengo que decir que esto es increíble: D
nXqd
@dotancohen:4d
n.st
¿Hay una buena manera de hacer esto con un número de línea relativo?
TrungDQ
Con números relativos simplemente use + y -. Entonces -4 es cuatro filas arriba del cursor y +4 está cuatro filas debajo de él.
rickythefox
10

Qué tal esto: el cursor está en la línea 11, estás en modo "vi".

:4co.<return>

Aparentemente también puedes hacerlo con un patrón:

:/^Yank/co.<return>

Puede usar "mo" (mover) en lugar de "co" (copiar) para mover la línea, en lugar de tirar y poner.

Bruce Ediger
fuente
1
Aún más corto ( t como comando de copia es un sobrante de ed)::4t.
tarleb
9

Prueba esto:

:4,4y  
P
Louis Salin
fuente
8

Tratar:

:4co11

Puede usar un argumento de 0pegar en línea 1. Esto también funcionará con rangos:

:m,n co k

copiará líneas a mtravés nde la línea k+1. Además, no importa dónde se encuentre en el búfer. El movecomando, mfunciona de manera similar.

gvkv
fuente
2

Esto debería hacerlo:

:4,12y
p
k
Umang
fuente
1
No, eso tira de los números de línea 4 a 12.
Lazer
Me refería a copiar y pegar la línea 4, a la línea 12.
Lazer
Editado ¿Es esto lo que querías?
Umang
2

Otros ya han mencionado el método más directo para hacer esto, que es :4y, pero quiero agregar dos notas al respecto que pueden ser útiles:

Uno, si escribe :help range, aprenderá todo sobre el uso de rangos para aplicar a los comandos de estilo Ex. MUY útil en muchos casos, y mucho más versátil que usar números de línea. Por ejemplo, si desea tirar de la primera línea que comienza con "tirar" después del comienzo del documento (incluso si está en la primera línea), use :0/^yank/y. La parte más poderosa de los rangos es la capacidad de combinarlos, por ejemplo, :./^Chapter/+50?Pete?dsignifica "Buscar la siguiente línea para comenzar con la palabra Capítulo (buscar hacia adelante desde la línea actual), luego saltar 50 líneas y buscar hacia atrás la palabra Pete, y elimine la primera línea en la que la encuentre ". Excepto que en realidad no mueve el cursor, simplemente HACE lo que le dices.

(He usado este tipo de especificación de rango para automatizar la creación de documentación complicada que implica buscar el nombre de la función debajo del cursor, luego buscar la siguiente línea que dice "Descripción" y tirarla a un registro específico ... etc.)

El otro consejo es que debes saber sobre el salto. Escriba :help jump-motionspara obtener más información, pero la forma en que se relaciona aquí es que puede saltar a la línea 4, tirar de él y luego VOLVER con 4Gyy''(o usar teclas de retroceso en lugar de apóstrofes para volver a su posición de inicio exacta, en lugar de simplemente la misma LÍNEA empezaste a las)

Comodín
fuente
2

Más corto:

:1t. copia la primera línea debajo de la actual.

Con rangos: :1,4t.copia las líneas 1 a 4 (inclusive) debajo de la actual.

También es posible con números de línea relativos:

:-1t. copia la línea anterior debajo de la actual.

En su ejemplo :4t-1, copiaría la cuarta línea debajo de la línea deseada.

Nota: :tes un sinónimo del :co[py]comando.

Erwin Rooijakkers
fuente