Qual è il comando (o il collegamento) per spostare una riga su o giù in vim? Il mio flusso di lavoro attuale è di strappare (copiare) la linea e quindi di eliminare quella linea e di mettere (incollare) quella linea.
Qual è il comando (o il collegamento) per spostare una riga su o giù in vim? Il mio flusso di lavoro attuale è di strappare (copiare) la linea e quindi di eliminare quella linea e di mettere (incollare) quella linea.
Risposte:
Innanzitutto, non è necessario eseguire lo strappo e l' eliminazione; quest'ultimo inserirà anche i contenuti eliminati nel registro (predefinito o specificato). Pertanto, ddp
/ ddkP
sono comandi comuni per spostare una riga di una in basso / in alto.
In alternativa, è possibile utilizzare il :move
comando, ovvero :move +1
/ :move -2
; questo non ostruisce il registro e puoi anche spostare interi intervalli. È possibile definire facilmente i mapping dei tasti per accorciarlo.
Se non ti dispiace plug-in (e il comfort aggiuntivo che spesso ne deriva), sia il plug-in senza compromessi di Tim Pope che il mio plug-in LineJuggler forniscono ]e
/ [e
mappature per spostare le linee (e molti altri; Tim è per una varietà di usi, il mio si è concentrato sulla gestione Linee)).
Il più semplice è: :m+
o :m-2
che è l'abbreviazione di :move
come suggerito da Ingo.
O usando la modalità visiva ( V) tagliando la linea ( d/ x) quindi incollandola ( p- sotto il cursore, Psopra il cursore) dopo aver spostato il cursore nel punto giusto prima di incollarlo (quindi in sintesi è Vxp/ Vdp).
Quando si spostano più righe in modalità visiva, è necessario utilizzare :m '>+1
(per spostare una riga verso il basso) o :m '<-2
(per spostare una riga verso l'alto).
Ecco una mappatura utile di esempio ( Shift+ ↑/ Shift+↓):
nnoremap <S-Up> :m-2<CR>
nnoremap <S-Down> :m+<CR>
inoremap <S-Up> <Esc>:m-2<CR>
inoremap <S-Down> <Esc>:m+<CR>
che è simile a Sublime Text ( Win / OSX ).
Ecco alcuni suggerimenti su vim wikia :
nnoremap <A-j> :m .+1<CR>==
nnoremap <A-k> :m .-2<CR>==
inoremap <A-j> <Esc>:m .+1<CR>==gi
inoremap <A-k> <Esc>:m .-2<CR>==gi
vnoremap <A-j> :m '>+1<CR>gv=gv
vnoremap <A-k> :m '<-2<CR>gv=gv
In modalità normale o in modalità inserimento, premere Alt-j per spostare la riga corrente verso il basso o premere Alt-k per spostare la riga corrente verso l'alto.
Dopo aver selezionato visivamente un blocco di linee (ad esempio, premendo V quindi spostando il cursore verso il basso), premere Alt-j per spostare l'intero blocco verso il basso o premere Alt-k per spostare il blocco verso l'alto.
Guarda anche:
Se desidero scambiare una riga con la riga sopra, di solito faccio quanto segue
ddkP
Spiegazione
ddp
FWIW, ecco quello che ho usato per anni. Sposta la riga corrente su e giù in modalità normale o la selezione in modalità visiva, regolando automaticamente la rientranza.
nnoremap ,<Up> :<C-u>silent! move-2<CR>==
nnoremap ,<Down> :<C-u>silent! move+<CR>==
xnoremap ,<Up> :<C-u>silent! '<,'>move-2<CR>gv=gv
xnoremap ,<Down> :<C-u>silent! '<,'>move'>+<CR>gv=gv
ddkP
, lo spostamento verso il basso è più facile:ddp
.