Keluar dari mode penyisipan blok dengan Ctrl-C


8

Dalam vim, jika Anda berada dalam mode penyisipan blok ( Ctrl-V, Shift-I) dan keluar menggunakan Ctrl-C(bukan Esc), itu membatalkan edit blok (dan hanya mengedit baris pertama).

Kenapa ini? Di hampir semua konteks lain, Ctrl-Cdan Escini identik. (Dan idealnya ada cara untuk memperbaikinya - Sekarang saya sudah terbiasa melakukannya Ctrl-Cdan akan memalukan jika saya harus belajar kembali ...)

Jawaban:


9

Ctrl-cdan Esctidak dijamin bersinonim, dan sering berbeda. Misalnya, dalam mode Sisipkan , Escakan memicu singkatan dan masuk ke mode Normal , sedangkan Ctrl-ctidak akan memicu singkatan atau InsertLeaveautocommand dan langsung ke mode Normal . Contoh lain adalah dalam vimode baris perintah lama , Escsebenarnya akan menjalankan perintah seolah-olah Anda telah menekan Enter. Vim sengaja berubah ini karena perilaku yang dianggap unintuitive dan mengejutkan, tapi Anda masih dapat mengaktifkannya dengan menambahkan xke 'cpoptions'.

Adapun operator visual blockwise, blockwise-operatorstag bantuan memiliki dokumentasi berikut:

Visual-block Insert                     *v_b_I*
With a blockwise selection, I{string}<ESC> will insert {string} at the start
of block on every line of the block, provided that the line extends into the
block.  Thus lines that are short will remain unmodified.  TABs are split to
retain visual columns.

Perhatikan bahwa hanya Escdisebutkan, bukan Ctrl-c.

Jadi, tidak, Ctrl-cdan Esctidak setara. Tidak pernah memalukan untuk melecehkan diri sendiri dari kesalahpahaman. Setelah Anda menyadarinya, Anda dapat memutuskan apa yang harus dilakukan selanjutnya. Opsi yang segera jelas adalah mempelajari perbedaan dan menggunakan kunci yang benar, atau memutuskan bahwa Anda tidak memerlukan fungsionalitas salah satu tombol dan memetakannya untuk mencocokkan yang lain.


4
Kena kau. Untuk saat ini saya akan vnoremap <C-c> <Esc>tetapi saya akan mengingat apa yang Anda katakan.
Sophie Alpert

@BenAlpert: Anda benar-benar membutuhkan nnoremap inoremap dengan nilai yang sama untuk sepenuhnya beralih ke ctrl-c sebagai Esc. Saya telah menggunakannya seperti ini selama bertahun-tahun sekarang dan itu berfungsi dengan baik untuk saya. Sayang sekali varian vi lainnya, seperti vile atau nvi tidak mengizinkan solusi ini, jadi saya kehilangan fungsionalitas abbr di sana.
Alex

0

Coba di :map ^C escmana "^ C" dimasukkan melalui CTRL+ vlalu CTRL+ c.


Bisakah Anda menjelaskan mengapa ini perlu? Apa efek samping lain yang dimilikinya?
Sophie Alpert

Mereka melayani fungsi yang sedikit berbeda. CTRL + C secara konvensional berarti "batalkan tindakan ini" (dalam konteks mirip-unix). Membatalkan aksi dalam konteks vim Anda berarti "hentikan apa yang terjadi dan kembali ke mode normal". Escape in vim berarti, "Saya sudah selesai kembali ke mode normal".
donasi berhasil pada tanggal

Mengenai efek samping, saya tidak memerhatikan. CTRL-C setelah :!cattampaknya masih memiliki efek yang diinginkan setelah peta. Jika Anda mengalami masalah, Anda dapat mencoba, mis. stty intr \^kPada prompt shell untuk mengubah karakter interupsi terminal menjadi CTRL-k.
Donasi berhasil pada
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.