Di Notepad ++, saya bisa menggunakan Ctrl+ Shift+ Up/ Downuntuk memindahkan garis saat ini ke atas dan ke bawah. Apakah ada perintah yang mirip dengan ini di Vim? Saya telah melihat melalui panduan yang tak ada habisnya, tetapi tidak menemukan apa pun.
Jika tidak ada, bagaimana saya bisa mengikat tindakan ke kombinasi tombol itu?
Sunting: Jawaban Mykola bekerja untuk semua baris, selain yang ada di awal dan akhir buffer. Memindahkan garis pertama ke atas atau garis bawah ke bawah menghapus garis, dan ketika memindahkan garis bawah ke atas itu melompat dua spasi pada awalnya, seperti pion! Adakah yang bisa menawarkan perbaikan?
Jawaban:
Masukkan berikut ini ke .vimrc Anda untuk melakukan pekerjaan
Menghilangnya garis itu tampak seperti bug Vim. Saya menaruh retasan untuk menghindarinya. Mungkin ada beberapa solusi yang lebih akurat.
Memperbarui
Ada banyak kesulitan yang tidak dapat dijelaskan dengan hanya menggunakan kombinasi Vim. Ini adalah garis yang hilang dan garis melompat ekstra.
Jadi di sini adalah solusi scripting yang dapat ditempatkan di dalam .vimrc atau ~ / .vim / plugin / swap_lines.vim
sumber
<A-up>
seperti yang digunakan dalam gerhana.ddkP
pada baris terakhir dokumen. Cobalah sendiri pada file 3-baris. Untuk menghindari masalah seperti itu, gunakan:m
pemetaan yang lebih mudah seperti yang diberikan pada Vim wiki .<A-up>
dan<A-down>
tetapi ketika saya mencoba kunci-kunci itu dalam vim dalam menjalankan visual dalam tmux pilihan menghilang dan kursor bergerak sejajar; tanpa memindahkan garis yang dipilih.Jika saya ingin menukar satu baris dengan baris di atas, saya biasanya melakukan hal berikut
Penjelasan
sumber
ddp
untuk memindahkan garis ke bawah (hapus garis dan tempel di bawah garis saat ini)4 dd
lalu pindah ke, ucapkan 2 baris, lalu:2
tempat yang ingin Anda tempel danP
.4dd
bukan4 dd
?dd<number>jp
untuk memindahkan garis saat ini <nomor> +1 garis ke bawah. Dandd<number>kp
untuk memindahkan baris <number> saat ini ke atas.Dengan asumsi kursor berada pada garis yang ingin Anda pindahkan.
Bergerak ke atas dan ke bawah:
:m
untuk bergerak:m +1
- bergerak ke bawah 1 baris:m -2
- naik 1 baris(Catatan Anda dapat mengganti +1 dengan angka apa saja tergantung pada berapa banyak garis yang ingin Anda pindahkan ke atas atau ke bawah, yaitu +2 akan memindahkannya ke bawah 2 baris, -3 akan memindahkannya ke atas 2 baris)
Untuk pindah ke jalur tertentu
:set number
- menampilkan garis angka (lebih mudah untuk melihat ke mana Anda memindahkannya):m 3
- pindahkan garis setelah garis ke-3 (ganti 3 ke garis yang Anda inginkan)Memindahkan banyak baris:
V
(ie Shift- V) dan gerakkan courser ke atas dan ke bawah untuk memilih beberapa baris dalam VIMsekali dipilih tekan :dan jalankan perintah di atas,
m +1
dllsumber
noremap <c-s-up> :m -2<CR> noremap <c-s-down> :m +1<CR>
Pindahkan garis ke atas:
ddkP
Pindahkan garis ke bawah:
ddp
sumber
.
untuk mengulang.Ini bekerja untuk saya:
http://vim.wikia.com/wiki/Moving_lines_up_or_down_in_a_file
BTW, jika Anda ingin menggunakan ALT + some_key dan terminal Anda (urxvt melakukan ini) menolak untuk mematuhi, Anda harus memasukkan sesuatu seperti ini di .vimrc Anda:
di mana ^] adalah karakter tunggal yang mewakili kunci ALT. Untuk memasukkan karakter itu, gunakan C+v, Escdalam Vim ( C+q, Escpada Windows).
sumber
[niv]noremap
adalah pemetaan untuk mode | insert | visual yang normal.<CR>
adalahCarriage Return
(Enter
kunci).tambahkan berikut ini ke file ~ / .vimrc (pastikan Anda tidak memiliki pemetaan untuk n, m)
sekarang menekan
n
tombol akan memindahkan garis ke bawah danm
akan memindahkan garis ke atas.sumber
Dalam mode perintah, posisikan kursor pada baris yang Anda inginkan untuk bergerak ke bawah, dan kemudian
Penjelasan: dd menghapus baris saat ini ke buffer umum p mengembalikannya SETELAH posisi kursor, atau dalam kasus seluruh baris, satu baris di bawah ini.
Ada beberapa kebingungan tentang perintah p dan P di banyak dokumen. Pada kenyataannya, p pasta setelah kursor, dan kursor P AT.
sumber
Cukup tambahkan kode ini ke .vimrc (atau .gvimrc)
sumber
Tepat seperti yang Anda cari dalam plugin yang luar biasa ini: https://github.com/vim-scripts/upAndDown
sumber
Sebuah solusi sederhana adalah untuk dimasukkan ke dalam Anda
.vimrc
baris-baris:sumber
Saya meletakkan yang berikut ini di akhir file .vimrc saya:
Jadi sekarang 'H' dan 'N' memindahkan garis saat ini ke atas dan ke bawah masing-masing.
sumber
Berikut adalah versi yang disederhanakan, untuk MacVim, menggunakan contoh artikel Wikia (lih. Tautan dari komentar gun ).
Saya hanya menggunakan varian pemilihan blok, karena yang diperlukan hanyalah Shift-V untuk memilih garis saat ini, dan secara opsional kursor naik / turun untuk memilih beberapa garis lagi.
Menurut pintasan di atas, menekan Cmd-Shift-Atas / Bawah akan menggeser pemilihan blok ke atas / bawah. "D" adalah kunci Command di MacVim, untuk Windows coba "C" (Control), atau "A" (Alt) (mis. <CAf> akan menjadi Control Alt f).
Artikel Wikia menambahkan "= gv" pada ini, yang memiliki efek untuk menyesuaikan lekukan blok setelah pindah, berdasarkan teks di sekitarnya. Ini membingungkan jadi saya menghapusnya, dan menambahkan pintasan untuk dengan cepat membuat indentasi pemilihan.
Pikiran, hal yang sama dapat dilakukan dengan << dan >> tetapi pemilihan akan hilang, jadi pintasan di atas memungkinkan untuk indentasi beberapa kali dan masih memindahkan blok sekitar karena pemilihan dipertahankan.
MacVim saya dikonfigurasi untuk beralih Tab dengan Cmd-Shift-Kiri / Kanan jadi saya menggunakan Cmd-Alt-Kiri / Kanan.
Inilah Tab switching untuk MacVim (masukkan .gvimrc dengan sisanya di atas):
sumber
plugin vim unimpaired.vim [e and] e
sumber
Ketika anda menekan perintah
:help move
divim
, di sini adalah hasilnya::[range]m[ove] {address} *:m* *:mo* *:move* *E134* Move the lines given by [range] to below the line given by {address}.
Misalnya: Pindahkan baris saat ini satu baris ke bawah =>
:m+1
.Misalnya: Pindahkan garis dengan angka 100 di bawah garis dengan angka 80 =>
:100 m 80
.Misalnya: Pindahkan garis dengan angka 100 di bawah garis dengan angka 200 =>
:100 m 200
.Misalnya: Pindahkan garis dengan angka dalam [100, 120] di bawah garis dengan angka 200 =>
:100,120 m 200
.sumber
Berikut adalah solusi yang berfungsi pada komputer saya : MacBook Pro menjalankan VIM 8.1
Perintah-perintah ini tidak akan menghapus baris Anda di bagian atas atau bawah buffer Anda.
Menggunakan simbol aktual yang dihasilkan Alt-J dan Alt-K adalah solusi untuk kode-kunci mereka yang tidak memetakan dengan benar di lingkungan saya.
Lemparkan ini di .vimrc lama dan lihat apakah itu cocok untuk Anda.
sumber
Bagi saya,
ddkkp
melakukannya (bukanddkP
dengan P huruf besar, yang akan berhasil juga).sumber
: m. +1 atau: m.-2 akan dilakukan jika Anda memindahkan satu baris. Inilah skrip saya untuk memindahkan banyak baris. Dalam mode visual, Alt-up / Alt-down akan memindahkan garis yang berisi pemilihan visual naik / turun satu baris. Dalam mode insert atau mode normal, Alt-up / Alt-down akan memindahkan garis saat ini jika tidak ada awalan hitungan yang diberikan. Jika ada awalan hitungan, Alt-up / Alt-down akan memindahkan banyak baris mulai dari baris saat ini naik / turun dengan satu baris.
sumber
Jika Anda ingin melakukan ini pada beberapa baris yang cocok dengan pencarian tertentu:
:g/Your query/ normal ddp
atau:g/Your query/ m -1
:g/Your query/ normal ddp
atau:g/Your query/ m +1
sumber