Apa perintah (atau pintasan) untuk memindahkan garis ke atas atau ke bawah di vim? Alur kerja saya saat ini adalah untuk menarik (menyalin) baris dan daripada menghapus garis itu dan daripada untuk menempatkan (menempel) garis itu.
Apa perintah (atau pintasan) untuk memindahkan garis ke atas atau ke bawah di vim? Alur kerja saya saat ini adalah untuk menarik (menyalin) baris dan daripada menghapus garis itu dan daripada untuk menempatkan (menempel) garis itu.
Jawaban:
Pertama, Anda tidak perlu menarik dan menghapus; yang terakhir juga akan memasukkan konten yang dihapus ke dalam register (default atau ditentukan). Oleh karena itu, ddp
/ ddkP
adalah perintah umum untuk memindahkan satu baris ke bawah / atas.
Atau, Anda dapat menggunakan :move
perintah, yaitu :move +1
/ :move -2
; ini tidak merusak register, dan Anda juga dapat memindahkan seluruh rentang. Anda dapat dengan mudah menentukan pemetaan kunci untuk mempersingkat ini.
Jika Anda tidak keberatan dengan plugin (dan kenyamanan tambahan yang sering menyertainya), baik plugin Tim Pope yang tidak rusak dan plugin LineJuggler saya menyediakan ]e
/ [e
memetakan untuk memindahkan garis (dan beberapa lainnya; Tim untuk berbagai penggunaan, tambang fokus pada penanganan baris)
Yang termudah adalah: :m+
atau :m-2
yang merupakan singkatan :move
seperti yang disarankan Ingo.
Atau menggunakan mode visual ( V) dengan memotong garis ( d/ x) lalu menempelkannya ( p- kursor di bawah, di Patas kursor) setelah Anda memindahkan kursor ke tempat yang tepat sebelum menempel (jadi dalam ringkasan itu Vxp/ Vdp).
Saat memindahkan beberapa baris dalam mode visual, maka Anda harus menggunakan :m '>+1
(untuk memindahkan satu baris ke bawah) atau :m '<-2
(untuk memindahkan satu baris ke atas).
Berikut adalah contoh pemetaan bermanfaat ( 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>
yang mirip dengan Sublime Text ( Win / OSX ).
Berikut adalah beberapa yang disarankan di 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
Dalam mode normal atau dalam mode insert, tekan Alt-j untuk memindahkan garis saat ini ke bawah, atau tekan Alt-k untuk memindahkan garis saat ini ke atas.
Setelah secara visual memilih blok garis (misalnya, dengan menekan V lalu menggerakkan kursor ke bawah), tekan Alt-j untuk memindahkan seluruh blok ke bawah, atau tekan Alt-k untuk memindahkan blok ke atas.
Lihat juga:
Jika saya ingin menukar satu baris dengan baris di atas, saya biasanya melakukan hal berikut
ddkP
Penjelasan
ddp
FWIW, inilah yang saya gunakan selama bertahun-tahun. Ini memindahkan garis saat ini ke atas dan ke bawah dalam mode normal atau pemilihan dalam mode visual, sambil menyesuaikan lekukan secara otomatis.
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
, bergerak turun lebih mudah:ddp
.