¿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)?

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

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
...

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].

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.