¿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


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


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.


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


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.


2

Esto debería hacerlo:

:4,12y
p
k

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)


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.

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.