Bagaimana cara mengirim sinyal ESC ke vim ketika kunci esc saya tidak berfungsi?

20

Saya mengalami masalah dengan Esckunci ketika saya ingin kembali ke mode interaktif dari mode insert. Apakah ada kunci lain yang digunakan untuk melepaskan mode memasukkan.

Sandra Ross
sumber
13
Kontrol pers[
Thomas Dickey
3
Cukup beberapa saran di vi.stackexchange.com/q/300/9708 juga.
Guy
2
Macbook Pro baru? <grin>
Rui F Ribeiro
2
tidak, karbon thinkpad x1
Sandra Ross

Jawaban:

7

Meskipun solusi yang ada, solusi konvensional di Vim adalah memetakan kembali kunci dalam .vimrckonfigurasi Anda . Faktanya, banyak pengguna Vim memiliki kunci yang lebih mudah dijangkau untuk dipetakan ulang Esc. Pilihan populer adalah Ctrl+ Enter, atau jj, dll.

Untuk mengaktifkan ini, cukup masukkan sesuatu seperti berikut ke dalam Anda .vimrcdan muat ulang / mulai ulang Vim:

" Shift-Enter
inoremap <S-CR> <Esc>
" Double-j
inoremap jj <Esc>

Lebih banyak informasi dan alternatif

Konrad Rudolph
sumber
1
Eyup, itulah cara Vim. Cara umum lain yang dipromosikan oleh Learn Vim the Hard Way (buku) adalahinoremap jk <Esc>
grochmal
Ini adalah solusi yang bagus, tapi apa masalahnya hanya menggunakan Ctrl + Enter + j?
Sandra Ross
@SandraRoss Anda benar-benar dapat menggunakan kombinasi tombol apa pun yang Anda suka (meskipun berhati-hatilah bahwa beberapa, misalnya Ctrl-Enter, tidak berfungsi pada macOS). Yang mengatakan, Ctrl + Enter + j menurut saya lebih sulit untuk mengetik, dan saya jujur ​​tidak tahu apakah Anda bahkan dapat mengkonfigurasi kombinasi tiga tombol dengan dua kunci non-modifier (Enter, j) di Vim.
Konrad Rudolph
Oke, saya setuju. Sebenarnya, Ctrl + Enter + jj tidak bekerja untuk saya, karena, memang, saya menggunakan macos X. Setidaknya, bisakah Anda memberi tahu saya apa yang harus saya masukkan hanya Ctrl + j.
Sandra Ross
@SandraRoss Untuk itu, inoremap <C-j> <Esc>harus berfungsi. :-)
Konrad Rudolph
32

Ctrl- [Mengirim karakter yang sama ke terminal sebagai Esckunci fisik . Yang terakhir hanyalah jalan pintas untuk yang pertama, secara umum.

DopeGhoti
sumber
3
Saya pernah memiliki terminal vt220 nyata, dan keyboard-nya tidak memiliki Escapekunci. Menekan Ctrl+[adalah satu - satunya cara untuk menghasilkan Escape.
Kusalananda
11

Jika Anda ingin dapat menggunakan kunci tunggal, sebagai solusi murni * nix (tanpa pemetaan Vim), Anda dapat mendefinisikan kunci lain sebagai Esc. Sama seperti pengguna Emacs memetakan ulang CapsLockke Ctrlbeberapa pengguna Vim (termasuk saya) memetakan kembali CapsLockke Esc. Ini berfungsi untuk semua * nix menggunakan X11.

Gunakan xev -event keyboard(dan kemudian tekan CapsLock) untuk mendapatkan kode kunci untuk CapsLockkunci (bagi saya itu adalah kode kunci 66). Kemudian Anda dapat menggunakannya xmodmapuntuk memetakan kembali kunci:

xmodmap -e 'remove Lock = Caps_Lock' -e 'keycode 66 = Escape'

Untuk mendapatkan ini saat masuk Anda dapat menambahkan xmodmapekspresi ~/.Xmodmapsebagai berikut:

remove Lock = Caps_Lock
keycode 66 = Escape

Meskipun untuk bagian kedua YMMV, karena tidak semua manajer tampilan berjalan ~/.Xmodmap. Anda mungkin perlu menambahkan xmodmap .Xmodmapuntuk .xinitrcpada beberapa dari mereka.

grochmal
sumber
Saya tahu persis apa yang Anda maksud. Saya sudah melihatnya awal minggu ini
Sandra Ross
Saya akan melakukan itu, tetapi saya menggunakan CapsLock sebagai kunci
penulisan
6

Anda dapat mencoba Ctrl-C, yang berfungsi untuk saya dan menurut saya lebih mudah daripada ESC. Namun saya tidak yakin apakah itu diaktifkan secara default.

vatsug
sumber
CTRL-C adalah ASCII 0x03, mengirimkan SIGINT ke shell - tidak sama dengan ESC.
kucing
@cat Pada dasarnya ia bekerja sama di vim. Saya selalu menggunakan Ctrl-C sebagai ganti Esc
Erik W
1
@cat: Anda mendapatkannya secara gratis, karena vim memiliki handler di tempatnya. Anda tidak perlu melakukan apa pun sendiri. Jawaban ini berhasil di luar kotak; Saya baru saja mencobanya. Apakah ini berfungsi secara umum untuk aplikasi apa pun? Tidak, tapi bukan itu yang diminta.
Lightness Races with Monica
2
@ kucing: Benarkah? Judulnya adalah "Bagaimana cara mengirim sinyal ESC ke vim ketika kunci esc saya tidak berfungsi?" , satu-satunya tag adalah vim , dan masalah yang dijelaskan dalam pertanyaan adalah tentang keluar dari mode penyisipan Vim. Inilah bagian ringkasan dari pertanyaan: "Apakah ada kunci lain yang digunakan untuk melepaskan mode penyisipan." Jika itu tidak spesifik untuk Vim dan mode sisipkannya, maka saya tidak tahu apa itu!
Lightness Races with Monica
1
@LightnessRacesinOrbit Yah, ketika saya melihat judul awalnya, itu adalah "kunci lain yang digunakan untuk Esc" dan pertanyaannya tidak terlihat spesifik vimsama sekali. Maaf! ¯_ (ツ) _ / ¯
cat
-3

Ctrl + F2

Diaktifkan secara default. Tidak perlu mengkonfigurasi pengaturan apa pun.

Anda akan pindah ke mode normal, di mana Anda bisa melakukannya :q! or :wq.

Raj
sumber
3
Ctrl+F2dapat mengirim pelarian, tetapi juga akan mengirim hal-hal lain.
Kusalananda