TL; DR; versi - Bagaimana cara membatalkan teks yang disisipkan dari buffer salinan OS saya tanpa membatalkan teks lain yang diketik sejak saya masuk ke mode penyisipan?
Deskripsi yang lebih panjang:
- Masukkan sesuatu ke dalam buffer salinan OS Anda (mis. Sorot beberapa teks dan lakukan
Command-c
di Mac) - Masuk ke mode insert di vim (
i
) - Ketikkan sesuatu (misalnya
asdf
) - Tanpa keluar dari mode penyisipan, tempel dari buffer salinan Anda ke vim (
Command-v
di Mac) - Memukul
escape
- Coba batalkan tempel (
u
)
Ini membatalkan segalanya sejak terakhir kali Anda masuk ke mode insert. Dengan kata lain, itu akan menghapus asdf
semua teks yang saya tempel.
Bagaimana cara hanya membatalkan teks yang disisipkan di? Apakah saya harus selalu keluar dari mode penyisipan dan kembali sebelum saya menempelkan teks hanya untuk memiliki opsi untuk membatalkan teks yang disisipkan?
:h i_CTRL-G_u
(yaitu, "hancurkan urutan, mulai perubahan baru" dalam mode sisipan).Di MacVim, Anda perlu menghapus peta
Edit > Paste
item menu untuk mengganti pintasan, lalu Anda dapat memetakan ulang Cmd-V (D-v
dalam bahasa MacVim) ke perintah yang sesuai di setiap mode. Saya menambahkan ini ke saya~/.gvimrc
dan sekarang semuanya bekerja dengan luar biasa:Yang
<C-g>u
diperlukan hanya dalam mode penyisipan untuk memperbaiki riwayat undo; yangnoremap
dancnoremap
hanya untuk mengembalikan perilaku pasta default di normal dan perintah mode.Terima kasih kepada Ingo Karkat karena menunjuk saya ke arah yang benar di sini.
sumber
Sebenarnya solusinya adalah Anda harus pergi ke mode perintah (misalnya Esc) terlebih dahulu dan masukkan kembali mode insert, tetapi itu hanya berfungsi jika saya mengetik secara manual tetapi tampaknya "secara acak" berhenti bekerja jika saya mengujinya
~/.vimrc
. Google tidak membantu sama sekali.Saya menghabiskan banyak waktu mencoba untuk memperbaiki masalah ini dan saya hanya mencari tahu alasannya dalam kasus saya:
Jangan memetakan kunci tempel yang sama dengan kunci tempel terminal yang ada
misalnya Ctrl+Shift+Vakan sisipkan di terminal Konsole saya, tapi jika saya menetapkan kunci ini
<C-S-v>
di~/.vimrc
, yang "undo hanya pasta tunggal, bukan beberapa pasta" tidak akan bekerja.Dalam kasus saya, saya harus menggunakan
<C-v>
daripada<C-S-v>
:Kasing Anda mungkin berbeda, tetapi intinya sama: jangan tetapkan konflik kunci tempel yang sama dengan kunci emulator terminal yang ada.
Saya sudah 100% membuktikan kesimpulan ini dengan mengatur kunci tempel terminal saya ke Ctrl+Vdan sekarang
<C-v>
berhenti bekerja tetapi<C-S-v>
berfungsi.Perhatikan juga bahwa vim terlalu sensitif dan aneh. Saya pikir saya harus menggunakan
i
dan kemudian 2 tombol Kanan secara manual untuk membuatnya bekerja di posisi kursor yang benar, itu berarti saya harus meletakkani
dan 2 tombol Kanan~/.vimrc
juga. Kasing Anda mungkin berbeda, tetapi intinya sama, pastikan kunci + pesanan di ~ / .vimrc 100% sesuai dengan yang Anda ketik secara manual.sumber