Remap kunci Esc di Vim

12

Apakah mungkin untuk memetakan kembali Esckunci ke kunci lain di Vim? Ketika saya menggunakan Vim di layar penuh konsol klien web VMware vSphere dan saya menekan Esctombol untuk keluar dari mode edit, itu juga membawa saya keluar dari mode layar penuh di jendela konsol.

Saya menggunakan Vim yang berasal dari repo RHEL YUM. (RHEL 7.5; Vim 7.4).

Beam Davis
sumber
Diposting silang
Rui F Ribeiro
2
Apa pun yang Anda lakukan, jangan memetakan esc ke sesuatu yang lain. Petakan sesuatu yang lain untuk dikawal.
D. Ben Knoble

Jawaban:

11

Biasanya, C-[ini juga merupakan cara untuk keluar dari mode insert. Beberapa orang suka memetakan jjdalam mode sisipkan sebagai cara untuk keluar dan kembali ke mode normal. Saya pribadi lebih suka jhjari saya 'meluncur' lebih baik dengan ini dan saya tidak terlalu meregang jari tengah saya.

Dari suatu tempat di pengaturan neovim saya:

inoremap jh <Esc>

Ini memetakan kembali jhuntuk melarikan diri dalam mode sisipkan.

Apakah ini yang anda inginkan?

Amir Eldor
sumber
3
Ctrl- [sama dengan 'ESC'
Herb Wolfe
Saya bermain-main dan juga menemukan ini berfungsi: ": inoremap <F1> <Esc>". Ini memetakan kunci F1 di tempat kunci Esc. Ini dapat disingkat menjadi ": ino <F1> <Esc>".
Beam Davis
Juga, huruf kapital tidak diperlukan.
Beam Davis
Ya, huruf kapital tidak perlu dan 'ino' lebih pendek untuk ditulis, tetapi dalam konfigurasi saya, saya lebih memilih singkat daripada pintasan keren. Saya senang saya membantu!
Amir Eldor
Sementara singkatnya itu keren dan semuanya ... itu adalah jiwa kecerdasan setelah semua ... Saya kira Anda berarti sesuatu yang lain. Kejelasan? Verbositas? Non-singkatnya? ;)
B Layer
8

TL; DR

Sebenarnya bagus untuk memetakan ulang escke baris rumah. Begini cara Anda memutuskan untuk memetakannya: Ambil satu tangan dan gerakkan 4 jari Anda di atas desktop secepat mungkin ke arah mana pun yang tercepat. Gunakan itu untuk memilih kunci apa yang harus dipetakan.

Bagi saya lebih alami untuk menggulir dari jari kelingking ke jari telunjuk. Karena itu saya memilih untuk menggunakan kj. Juga, saya melakukan grep -rHin kj ~/src(grep rekursif pada direktori induk dari semua kode sumber saya) dan tidak menemukan yang cocok.

" esc in insert mode
inoremap kj <esc>

" esc in command mode
cnoremap kj <C-C>
" Note: In command mode mappings to esc run the command for some odd
" historical vi compatibility reason. We use the alternate method of
" existing which is Ctrl-C

Catatan: Jika Anda harus mengetik literal kj(atau apa pun pemetaan Anda) ketikkan saja dengan 2 detik di antaranya. (Anda akan melihat kursor ragu untuk bergerak setelah char pertama. Tunggu sampai kursor bergerak sebelum mengetik ke-2.)


Saya telah menggunakan vimselama 19 tahun. Saya terkejut ketika Apple memperbarui MacBook Pro mereka untuk memiliki panel sentuh dan tidak ada esctombol fisik . Saya melihat posting yang menyarankan pemetaan jjdan jkke <Esc>dan membencinya. Tapi saya dengan sabar mencatat pada kartu indeks setiap kali itu mengganggu saya. Sekitar 15 menit kemudian saya meninjau catatan saya dan muncul dengan TL; DR di atas untuk mengatasi yang berikut:

  1. Saya cenderung menekan escmembagikan ketika saya tidak dalam mode memasukkan hanya untuk "pastikan" dan jjakan menjatuhkan saya 2 baris.
  2. jkadalah no-op (turun, atas) tetapi kjlebih alami untuk tangan saya.
  3. Saya juga perlu menggunakan escuntuk keluar dari mode perintah tanpa menyelesaikan perintah.

Ini harapan saya bahwa saya akhirnya dapat menghentikan kebiasaan saya mengenai escaplikasi lain dan menutup jendela ketika saya beberapa menit menulis. Saya lebih suka memasukkan karakter tersesat kj daripada kehilangan pekerjaan saya!

Bruno Bronosky
sumber
1
Catatan, untuk cnoremap Anda, ketika esc berasal dari pemetaan, itu akan mengeksekusi perintah, daripada membatalkannya. Itu untuk alasan kompatibilitas dengan vi
Christian Brabandt
Baik dalam mode insert dan command, esc masih bekerja. Tapi, Anda juga memiliki kombo baris beranda alternatif ini yang juga Anda gunakan. Mungkin saya tidak mengikuti maksud Anda.
Bruno Bronosky
2
intinya adalah, untuk mode perintah, jalan keluar yang berasal dari pemetaan tidak akan membatalkan perintah, tetapi menjalankannya. Coba:ls kj
Christian Brabandt
@ChristianBrabandt Anda benar. Apa yang bisa dilakukan? Atau setidaknya, di mana ini didokumentasikan? Saya bahkan tidak dapat menemukan istilah pencarian yang layak untuk menemukan sesuatu tentang ini.
Bruno Bronosky
1
Saya tidak ingat apakah ini sedang didokumentasikan, saya tersandung pada perilaku itu beberapa tahun yang lalu. Ah, ini semacam didokumentasikan di :h c_Esc: Di makro [...] mulai masukkan perintah. (Makro biasanya juga termasuk pemetaan)
Christian Brabandt