Come si usano i numeri di riga relativi in ​​modalità riga di comando?


16

Recentemente ho imparato da Practical Vim un modo per copiare o spostare blocchi di linee senza spostare il cursore dalla posizione corrente. Questo viene fatto in modalità riga di comando. per esempio

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

Anche se mi piace, è un problema digitare i numeri di riga lunga, soprattutto quando il file ha troppe righe.

A volte, le linee da spostare sono relativamente vicine al cursore (ma non voglio spostare il cursore, strattonate, tornate dove ero, incollate!). Sarebbe bello se potessi usare numeri relativi, simili a come facciamo in modalità normale. È come dire

sposta qui 5 linee che sono 10 linee sopra la linea corrente

In breve, come utilizzare i numeri relativi in ​​modalità riga di comando (simile alla modalità normale)?

Risposte:


23

Supponendo che le tue linee si estendano da 15 a 10 righe sopra quella corrente, puoi ottenere ciò che hai richiesto usando i relativi numeri di riga:

:-10,-15m.

Sfortunatamente quando si specifica un intervallo a ritroso, Vim ti chiede di confermare se questo è quello che volevi davvero. Per evitare il passaggio di conferma, è possibile digitare silentprima del comando o semplicemente specificare un intervallo di inoltro:

:-15,-10m.

Come ci si potrebbe aspettare, +può essere utilizzato per fare riferimento alle righe sotto quella corrente.

Un aiuto dettagliato può essere trovato con:

:help cmdline-ranges

1
Ma non ho mai usato questa funzione. Lo faccio 15k d5j 10j P.
joeytwiddle,

La differenza è che 15k, 5j funziona in modalità comando e quello spiegato nella risposta è in modalità inserimento. Quindi in base alla modalità possiamo scegliere quella appropriata. I comandi in modalità inserimento sono generalmente i criteri di selezione per l'esecuzione di altri comandi.
Soundararajan,

12

Puoi utilizzare numeri fissi nel tuo intervallo:

:200,300command

O numeri relativi:

:-27,+46command

O segni manuali:

:'a,'bcommand

O segni automatici:

:'[,'>command

O ricerche:

:?foo?,/bar/command

O scorciatoie di linea:

:.,$command

O qualsiasi combinazione dei trucchi sopra:

:?foo?,+46command
:'a,$command
...

3

Puoi usare l'indirizzamento relativo (es. .-10,.+3) Con qualsiasi comando Ex, cp. :help :range.

In alternativa, dai un'occhiata al mio plugin LineJuggler ; fornisce diverse mappature brevi per spostare le linee o duplicarle, e tutte quelle mappature assumono un offset di linea relativo come [count].

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.