Inilah cara saya biasanya menyalin blok teks atau kode:
- Pilih blok dengan mode Visual ( V) dan hapus dengan d; atau jika hanya satu baris, gunakan saja dd.
- Pergi ke tempat yang saya inginkan teksnya, saya terlalu bodoh untuk mengingat perbedaan antara pdan P, jadi saya mendapatkan ini dengan benar sekitar 50% dari waktu. (jika saya salah: batalkan coba lagi).
- Kadang-kadang, lekukan perlu disesuaikan, jadi saya kembali ke mode Visual Vdan memilih kembali blok yang sama, dan menggunakan >atau <untuk memperbaikinya.
Apakah ada cara yang lebih mudah? Dalam beberapa editor saya telah melihat bahwa Anda dapat "mengambil" satu blok teks, seolah-olah, dan memindahkannya; inilah contoh dari Emacs (tapi saya juga pernah melihat ini di editor lain):
Atau mungkin ada cara lain (bahkan lebih baik)?
cut-copy-paste
visual-mode
Martin Tournoij
sumber
sumber
]p
atau[p
bukanp
atauP
. Dengan cara ini blok yang Anda tempel akan diindentifikasi secara otomatis.Jawaban:
Ada plugin untuk itu: dragvisuals.vim .
Ini tidak mengikat tombol apa pun secara default, jadi Anda harus melakukannya sendiri. Saya suka memetakannya ke Control+ Arrow key:
Itu juga dilengkapi dengan kunci bonus untuk menduplikasi pilihan saat ini:
Keuntungan dari plugin ini dibanding jawaban lain:
Trik lain yang berguna untuk melengkapi ini, adalah keybinds ini:
Ini akan memilih kembali pemilihan visual terakhir setelah Anda gunakan >saat dalam mode Visual, sehingga Anda dapat menyesuaikan penyelarasan lebih mudah (Anda juga dapat menggunakan tombol panah, tetapi ini akan memindahkannya dengan satu karakter, dan bukan satu
shiftwidth
).sumber
Untuk langkah 3, Anda dapat menggunakan
gv=
sebagai gantinya (=
berarti indentasi, dangv
berarti "pilih kembali pemilihan visual terakhir").Untuk perilaku Emacs, akan sangat mudah untuk menambahkan beberapa pemetaan di .vimrc Anda:
Anda kemudian dapat menggunakan tombol panah atas dan bawah untuk bergerak di sekitar pilihan garis visual. (Tentu saja, Anda dapat memetakan ke tombol yang berbeda juga jika Anda membenci panah.)
(Anda bisa melakukan ini dengan pilihan visual normal dan memindahkannya ke kiri dan kanan juga:
vnoremap <left> dhPgvhoho
danvnoremap <right> dpgvlolo
.)sumber
gv
pergi ke pemilihan visual terakhir, yang dalam hal ini akan menjadi paragraf yang telah dihapus. Apa yang saya lewatkan?Anda dapat memetakan kembali beberapa tombol untuk memindahkan garis. Misalnya, panah ke atas dan ke bawah jika Anda terbiasa bergerak
hjkl
.Misalnya pada .vimrc
:m
, perintah normal untuk memindahkan satu baris+1
atau-2
untuk menunjukkan garis naik atau turun (-1 menjaga garis di tempat yang sama)gv
untuk memilih lagi teks yang sama dalamVISUAL
modeSolusi ini tidak mengganggu register, sehingga setiap teks yang disalin masih akan tersedia, serta memformat ulang kode untuk mengatur lekukan yang tepat, dll.
sumber
=
(sering mengubah format yang tidak berhubungan terlalu banyak untuk saya).Cara termudah yang saya temukan untuk melakukan ini didokumentasikan di sini: http://vimrcfu.com/snippet/77
Masukkan yang berikut ini di .vimrc Anda
sumber
Ada beberapa plugin untuk ini tetapi saya lebih suka vim- unimpaired Tim Pope ( github ) (Ingo Karkat LineJuggler serupa).
Anda secara visual memilih blok teks Anda kemudian lakukan
]e
(e untuk pertukaran) untuk memindahkan blok ke bawah ([e
untuk arah lain). Gunakan.
untuk mengulangi tindakan (Anda sudah menginstal repeat.vim, bukan). Jika Anda melangkah terlalu jauh maka batalkan saja melaluiu
.Sekarang secara pribadi saya berpikir
p
danP
merupakan perintah umum sehingga akan lebih baik untuk mempelajarinya sebelum menciptakan kebiasaan buruk. Maka Anda bisa menggunakan]p
untuk menempel pada indentasi yang sama. Jika Anda menggunakan yang tidak rusak, Anda dapat melakukan>p
untuk menempelkan level indensi lebih dalam atau=p
untuk menempel dan memformat ulang.Jika Anda kesulitan mengingat
p
danP
kemudian mungkin membantu Anda untuk memikirkan mereka dalam halo
danO
perintah yang merupakan semacam simetri.Seperti yang telah dicatat orang lain, Anda dapat menggunakan
gv
untuk memilih kembali pilihan visual. Namun jika Anda hanya meletakkan / menempelkan teks Anda akan kehilangan pilihan visual Anda. Jangan khawatir karena setiap perubahan (dan yank!) Akan mengatur'[
dan di']
sekitar area yang diubah. Jadi Anda dapat membuat indentasi melalui>']
(baca: bergeser ke kanan hingga akhir dari perubahan terakhir) dan gunakan.
untuk mengulangi indentasi hingga Anda memiliki teks di tempat yang tepat.Untuk bantuan lebih lanjut lihat:
sumber
Jika Anda tahu nomor baris yang ingin Anda pindahkan blok teks, maka Anda dapat menggunakan rentang atau pemilihan visual dengan
:move
perintah untuk memindahkan blok ke sana.Misalnya, jika saya memiliki file berikut:
dan saya ingin memindahkan garis a ke setelah garis c, saya meletakkan kursor pada garis a dan masuk
:m3
, dan garis tersebut kemudian digeser.Ini juga berfungsi dengan +/- offset. Pada contoh di atas, hasil yang sama dapat dicapai dengan
:m+2
memindahkan garis 2 ke bawah.Untuk blok teks, satu-satunya perbedaan adalah menambahkan dalam rentang atau pilihan. Untuk memindahkan garis aaa dan bbb ke akhir file, gunakan perintah seperti
:1,2m$
($ = baris terakhir) atau pilih secara visual baris dan:m$
.sumber
:move
lihat juga vim.wikia.com/wiki/Moving_lines_up_or_down atau Tip 29 Gandakan atau Pindahkan Baris Menggunakan ': t' dan ': m' Perintah dalam Buku Praktis Vim oleh D. Neil.Plugin vim-move by matze
tersedia dari
Pemetaan default dalam mode visual dan normal:
sumber