¿Cómo tirar de una línea con un cierto número de línea?


Respuestas:


59

De :help :yank:

:[range]y[ank] [x]      Yank `[range]` lines [into register x].

Entonces, para tirar de la línea 4, uno escribiría:

:4yank

Tenga en cuenta que puede hacerlo fácilmente desde el modo de inserción con <C-o>; esto le permite ejecutar un comando, después del cual vuelve al modo de inserción; por ejemplo:

<C-o>:4yank

Por supuesto, también puede usar otros rangos. Algunos ejemplos:

  • Líneas 1 a 3: :1,3yank
  • El búfer completo: :%yank
  • Desde la línea actual hasta el final del búfer: :.,$:yank
  • La línea actual y las siguientes 3: :.,+3yank
  • La línea actual y las 3 anteriores: :-3,.yank
  • La línea 3 líneas sobre la línea actual: :-3yank

Las cosas más útiles para recordar acerca de los rangos:

  • Está en forma de :line1,line2command.
  • A .es la línea actual (puede omitir el punto en la mayoría de los casos; :.,+3yanky :,+3yankson lo mismo)
  • Usted especifica líneas relativas a la posición actual con +ny -n.

Ver :help [range]para más información.


66
Puntos de bonificación por mencionar <Co>, estoy subutilizando eso.
PhilippFrank

77
También vale la pena mencionar que puedes abreviar :4yankcon:4y
NewbieOnRails

35

Además de la respuesta de Carpetsmoker, debo señalar lo increíble :help :my :help :t.

Si desea copiar la línea 4 justo debajo de la línea actual, puede hacer esto:

:4t.

o eso, si quieres copiar esa línea justo encima de la línea actual:

:4t-

1

Además de los comandos ex-mode que tienes, también puedes lograrlo en modo comando, por ejemplo: 4GY''- que significa: ir a la línea 4 ( 4G), tirar de la línea ( Y) y volver a la línea anterior ( '').

También puedes usar marcas de salto; para su segunda pregunta, por ejemplo: mm3kY'm- lo que significa: establecer la marca m ( mm), ir tres líneas hacia arriba ( 3k), tirar de la línea ( Y), volver a la marca m ( 'm).


1
Usar `` es probablemente una mejor recomendación que '' ya que el primero vuelve a la misma línea y columna. Lo mismo para `m vs. 'm.
jamessan

Estoy de acuerdo. (¿Alguna idea de cómo crear backtics literales en el marcado de wiki ya que tienen un significado especial?) - De lo contrario, su comentario servirá como una enmienda a mi respuesta y como una pista para los lectores.
Janis

Debe usar varios backticks para delimitar el código en línea (cf, daringfireball.net/projects/markdown/syntax#code ). Sé que funciona en preguntas / respuestas, pero no pude hacerlo funcionar en mi comentario.
jamessan

1

Simplemente escriba

:4y

tirar de la línea 4

irá al registro sin nombre. Luego, (por ejemplo) puede usar ppara ponerlo en otro lugar. También puede usar [n]p, por ejemplo, 10p para pegarlo 10 veces.

Puede ponerlo en un registro con nombre como "a" con

:4y a

2
La parte sobre ponerlo en un registro con nombre con "ay4 no se ve bien. Si haces eso, vim te estará esperando para que digas" 4 ¿cuál es? ". la posición actual, si escribe / foo <Enter>, se tirará hasta la cuarta aparición siguiente de "foo", etc.
Don Hatch

El último comando debería leer 4G"ayy.
romainl

0

Tu puedes hacer

:10y <Enter> (to copy the line 10)
p (paste line 10 where the cursor is)

Configurar el número relativo también ayuda a moverse entre líneas de código.

:set relativenumber

Ahora puede copiar la quinta línea sobre el cursor con:

:-5y <Enter>
:p (to paste)
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.