Lệnh (hoặc phím tắt) để di chuyển một dòng lên hoặc xuống trong vim là gì? Quy trình công việc hiện tại của tôi là kéo (sao chép) dòng và xóa dòng đó và hơn là đặt (dán) dòng đó.
Lệnh (hoặc phím tắt) để di chuyển một dòng lên hoặc xuống trong vim là gì? Quy trình công việc hiện tại của tôi là kéo (sao chép) dòng và xóa dòng đó và hơn là đặt (dán) dòng đó.
Câu trả lời:
Đầu tiên, bạn không cần phải kéo và xóa; cái sau cũng sẽ đưa nội dung bị xóa vào thanh ghi (mặc định hoặc được chỉ định). Do đó, ddp
/ ddkP
là các lệnh phổ biến để di chuyển một dòng xuống / lên.
Ngoài ra, bạn có thể sử dụng :move
lệnh, tức là :move +1
/ :move -2
; điều này không làm tắc nghẽn thanh ghi và bạn cũng có thể di chuyển toàn bộ phạm vi. Bạn có thể dễ dàng xác định ánh xạ chính để rút ngắn điều này.
Nếu bạn không bận tâm đến các plugin (và sự thoải mái bổ sung thường đi kèm với chúng), cả plugin không có kinh nghiệm của Tim Pope và plugin LineJuggler của tôi đều cung cấp ]e
/ [e
ánh xạ để di chuyển các dòng (và nhiều hơn nữa; dòng (s)).
Đơn giản nhất là: :m+
hoặc :m-2
viết tắt cho :move
như Ingo đề xuất.
Hoặc sử dụng chế độ trực quan ( V) bằng cách cắt dòng ( d/ x) sau đó dán nó ( p- bên dưới con trỏ, Pbên trên con trỏ) sau khi bạn di chuyển con trỏ đến đúng vị trí trước khi dán (tóm lại là Vxp/ Vdp).
Khi di chuyển nhiều dòng trong chế độ trực quan, sau đó bạn sẽ sử dụng :m '>+1
(để di chuyển một dòng xuống) hoặc :m '<-2
(để di chuyển một dòng lên).
Dưới đây là mẫu ánh xạ hữu ích ( 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>
tương tự như văn bản cao siêu ( Win / OSX ).
Dưới đây là một số gợi ý tại 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
Ở chế độ bình thường hoặc ở chế độ chèn, nhấn Alt-j để di chuyển dòng hiện tại xuống hoặc nhấn Alt-k để di chuyển dòng hiện tại lên.
Sau khi trực quan chọn một khối các dòng (ví dụ: bằng cách nhấn V sau đó di chuyển con trỏ xuống), nhấn Alt-j để di chuyển toàn bộ khối xuống hoặc nhấn Alt-k để di chuyển khối lên.
Xem thêm:
Nếu tôi muốn hoán đổi một dòng với dòng trên, tôi thường làm như sau
ddkP
Giải trình
ddp
FWIW, đây là những gì tôi đã sử dụng trong nhiều năm. Nó di chuyển dòng hiện tại lên và xuống trong chế độ bình thường hoặc lựa chọn ở chế độ trực quan, trong khi điều chỉnh thụt lề tự động.
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
, di chuyển xuống dễ dàng hơn :ddp
.