Jakie jest polecenie (lub skrót), aby przesunąć linię w górę lub w dół w vimie? Mój obecny obieg pracy polega na szarpaniu (kopiowaniu) linii i usuwaniu tej linii, a następnie wstawianiu (wklejaniu) tej linii.
Jakie jest polecenie (lub skrót), aby przesunąć linię w górę lub w dół w vimie? Mój obecny obieg pracy polega na szarpaniu (kopiowaniu) linii i usuwaniu tej linii, a następnie wstawianiu (wklejaniu) tej linii.
Odpowiedzi:
Po pierwsze, nie musisz szarpać i usuwać; ten drugi umieści również usuniętą zawartość w rejestrze (domyślnym lub określonym). Dlatego ddp
/ ddkP
są typowymi poleceniami do przesuwania linii o jeden w dół / w górę.
Alternatywnie możesz użyć :move
polecenia, tj. :move +1
/ :move -2
; nie blokuje to rejestru, a także można przenosić całe zakresy. Możesz łatwo zdefiniować kluczowe odwzorowania, aby to skrócić.
Jeśli nie masz nic przeciwko wtyczkom (i dodatkowemu komfortowi, który często się z nimi wiąże), zarówno nienaruszona wtyczka Tima Pope'a, jak i moja wtyczka LineJuggler zapewniają ]e
/ mapują[e
ruchy linii (i kilka innych; Tim do różnych zastosowań, mój koncentruje się na obsłudze linie)).
Najłatwiej jest: :m+
lub :m-2
który jest skrótem, :move
jak sugeruje Ingo.
Lub używając trybu wizualnego ( V), przecinając linię ( d/ x), a następnie wklej ją ( p- pod kursorem, Pnad kursorem) po przesunięciu kursora we właściwe miejsce przed wklejeniem (tak w skrócie to Vxp/ Vdp).
Przenosząc wiele linii w trybie wizualnym, musisz użyć :m '>+1
(aby przesunąć jedną linię w dół) lub :m '<-2
(aby przesunąć jedną linię w górę).
Oto przykładowe przydatne mapowanie ( 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>
który jest podobny do Sublime Text ( Win / OSX ).
Oto kilka sugestii na vim wiki :
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
W trybie normalnym lub w trybie wstawiania naciśnij Alt-j, aby przesunąć bieżącą linię w dół, lub naciśnij Alt-k, aby przesunąć bieżącą linię w górę.
Po wizualnym wybraniu bloku linii (na przykład naciśnięciu V, a następnie przesunięciu kursora w dół), naciśnij Alt-j, aby przesunąć cały blok w dół, lub naciśnij Alt-k, aby przesunąć blok w górę.
Zobacz też:
Jeśli chcę zamienić jedną linię z linią powyżej, zwykle wykonuję następujące czynności
ddkP
Wyjaśnienie
ddp
FWIW, oto, czego używałem od lat. Przesuwa bieżącą linię w górę i w dół w trybie normalnym lub wybór w trybie wizualnym, automatycznie dostosowując wcięcie.
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
, przesunięcie w dół jest łatwiejsze:ddp
.