¿Cómo uso números de línea relativos en modo de línea de comando?

16

Recientemente aprendí de Practical Vim una forma de copiar o mover bloques de líneas sin tener que mover el cursor desde la posición actual. Esto se hace en modo de línea de comando. p.ej

:123,133m.  # moves lines from 123 to 133 below the cursor position.

Si bien me gusta, es difícil escribir los números de línea larga, especialmente cuando el archivo tiene demasiadas líneas.

A veces, las líneas para mover están relativamente cerca del cursor (pero no quiero mover mi cursor, tirar, volver donde estaba, pegar). Sería genial si pudiera usar números relativos, similar a cómo lo hacemos en modo normal. Es como decir

mover 5 líneas que son 10 líneas sobre la línea actual hasta aquí

En resumen, ¿cómo usar números relativos en modo de línea de comando (similar al modo normal)?

rpattabi
fuente

Respuestas:

23

Suponiendo que sus líneas abarcan de 15 a 10 líneas por encima de la actual, puede lograr lo que solicitó utilizando números de línea relativos:

:-10,-15m.

Desafortunadamente, al especificar un rango hacia atrás, Vim le pide que confirme si eso es lo que realmente quería. Para evitar el paso de confirmación, puede escribir silentantes de su comando, o simplemente especificar un rango de reenvío:

:-15,-10m.

Como es de esperar, +puede usarse para referirse a líneas debajo de la actual.

Se puede encontrar ayuda detallada con:

:help cmdline-ranges
joeytwiddle
fuente
1
Pero nunca he usado esta característica. Hago 15k d5j 10j P.
joeytwiddle
La diferencia es que 15k, 5j funciona en modo comando, y el que se explica en la respuesta está en modo inserción. Entonces, según el modo, podemos elegir el apropiado. Los comandos en modo de inserción son generalmente los criterios de selección para ejecutar otros comandos.
Soundararajan
12

Puede usar números duros en su rango:

:200,300command

O números relativos:

:-27,+46command

O marcas manuales:

:'a,'bcommand

O marcas automáticas:

:'[,'>command

O búsquedas:

:?foo?,/bar/command

O atajos de línea:

:.,$command

O cualquier combinación de los trucos anteriores:

:?foo?,+46command
:'a,$command
...
romainl
fuente
3

Puede usar el direccionamiento relativo (p .-10,.+3. Ej. ) Con cualquier comando Ex, cp. :help :range.

Alternativamente, eche un vistazo a mi complemento LineJuggler ; proporciona varias asignaciones cortas para mover líneas o duplicarlas, y todas esas asignaciones toman un desplazamiento de línea relativo como [count].

Ingo Karkat
fuente