Apakah menggunakan ctrl + c alih-alih esc untuk keluar dari mode sisipkan merusakkan sesuatu di vi?

15

Saat menggunakan vi, Anda dapat keluar dari mode insert dengan Ctrl+ Calih-alih yang lebih tradisional Esc. Apakah ada situasi di mana tidak diinginkan untuk digunakan untuk yang pertama, bukan yang terakhir? Apakah itu melanggar selain praktik terbaik?

MDMarra
sumber
Tidak diinginkan untuk memukul yang pertama secara tidak sengaja, yang membuat Anda seperti kesalahan Type :quit<Enter> to exit Vimdan membuat saya Google cara untuk kembali. Menekan imembuat Anda segera kembali ke mode memasukkan.
Noumenon

Jawaban:

9

Ctrl-Cdan Esctidak sama di vi/ vimdalam kebanyakan mode, termasuk mode insert. Perbedaannya adalah Escpemicu singkatan sementara Ctrl-ctidak. Apakah ini penting bagi Anda tergantung pada apakah Anda atau plugin yang Anda gunakan menggunakan singkatan.


Perhatikan bahwa lebih aman untuk berasumsi Escdan Ctrl-Ctidak bukan berarti hal yang sama di vim. Contoh lain dari situs yang sama ini adalah ketika keluar dari mode penyisipan blok (tidak dalam vi).

jw013
sumber
Baik untuk diketahui, tetapi pertanyaan saya adalah tentang keluar dari mode penyisipan.
MDMarra
@MDMarra Doh, salah baca pertanyaan Anda. Mode penyisipan masih berbeda: lihat jawaban yang diperbarui.
jw013
1
Inilah perbedaan paling penting yang harus saya tangani: insert multiline dengan mode blok visual berfungsi dengan Esc dan bukan dengan Cc.
enfascination
4

Saya pikir maksud Anda vim, bukan vi.

Ini memang bekerja vim, meskipun saya tidak akan menggunakannya kecuali saya 100% yakin saya tidak akan pernah menyentuh sistem operasi non-Linux. Alasannya adalah bahwa OS lain mungkin memiliki implementasi sendiri vi, yang tidak mengimplementasikan ini, dan Anda mungkin menemukan bahwa ketika berjalan vipada platform tersebut, Ctrl-C memiliki perilaku tradisionalnya sendiri: mengganggu proses dan meninggalkan terminal Anda dalam keadaan aneh .

Michael Hampton
sumber
3
Bisakah Anda menunjukkan viimplementasi apa pun yang masih ada saat ini yang tidak ditangani Ctrl-C? Lihat jawaban saya untuk perbedaan nyata.
jw013
2

Jika Anda merujuk vim, ada sedikit perbedaan. CTRL-Ctidak memeriksa singkatan, dan itu tidak memicu InsertLeaveacara. Jadi Anda atau plugin telah menentukan autocmdpernyataan apa pun yang bergantung pada InsertLeave, mereka tidak akan dipicu.

Dari dokumentasi resmi http://vimhelp.appspot.com/insert.txt.html :

<Esc> or CTRL-[ End insert or Replace mode, go back to Normal mode.  Finish
                abbreviation.

CTRL-C          Quit insert mode, go back to Normal mode.  Do not check for
                abbreviations.  Does not trigger the InsertLeave autocommand
                event.

Anda dapat menentukan pemetaan untuk CTRL-Cuntuk <esc>, maka itu akan memicu InsertLeave.

wisbucky
sumber