Kunci ESC menyebabkan penundaan kecil di terminal karena perilaku Alt +

67

Setup terminal saya adalah gnome-terminal + tmux + zsh dengan binding b.

Dalam aplikasi seperti vim atau bahkan dalam mode pengeditan baris perintah zsh, saya harus sering menekan ESCtombol tetapi ada sedikit penundaan sebelum efek dari tombol ini terjadi. Lihat Layar GNU membuat kunci Vim ESC lambat

Setelah beberapa percobaan, saya menemukan bahwa menekan ESCtombol dan segera kunci lain (katakanlah b) memiliki efek yang sama dengan memukul Alt+b. Saya tidak tahu mengapa ini terjadi (mungkin karena alasan warisan ketika tidak ada Alt? Saya tidak tahu). Either way, saya punya dua Altkunci dan saya tidak ingin perilaku ini dengan ESCkunci saya . Saya sudah mencoba C+[dan masalah yang sama dengan itu juga.

Saya tidak yakin siapa yang bertanggung jawab untuk ini, gnome-terminal atau tmux atau OS saya sendiri (Ubuntu Natty). Setiap ide tentang cara mengatasi ini akan sangat bagus.

Pembaruan : Saya memeriksa tanpa tmux pada terminal yang berbeda (LXTerminal) dan penundaan juga ada di sana.

Shrikant Sharat
sumber
1
Saya tidak tahu mengapa vim saya bertingkah aneh. Pertanyaan ini membuat saya ingat bahwa saya baru saja mulai menggunakannya di layar. Anda menyelamatkan kewarasan saya.
pabo

Jawaban:

111

Inilah perbaikan yang sebenarnya. Tambahkan yang berikut ke .tmux.conf:

set -s escape-time 0
Vicent Marti
sumber
4
Cemerlang, terima kasih! Punya penundaan meninggalkan mode insert di vim dan tidak benar-benar berpikir itu mungkin mengganggu tmux. Ini berhasil
actionhrimp
7
Seperti yang disebutkan dalam superuser.com/questions/252214/... Saya harus melakukan tmux kill-serverini agar bisa berlaku.
PhilT
Bagi siapa pun yang tiba di halaman ini mencoba memahami mengapa ada penundaan saat beralih dari mode insert ke mode command saat menggunakan mode vi di bash, lihat superuser.com/a/1161871/236677
Kvass
3
Anda dapat memuat ulang file konfigurasi dengan membuka command prompt di dalam tmux dengan tmux-prefix(default Ctrl+b) diikuti oleh :dan memasukkan source-file $HOME/.tmux.conf.
Folfy
7

Penundaan disebabkan oleh rutinitas input yang mungkin harus memutuskan apakah tombol fungsi ditekan atau tidak. Untuk ini, rutin input memulai timer kapan pun ia membaca dalam karakter ESC. Karakter yang dibaca dari input sebelum timer habis (misalkan sepersepuluh detik) kemudian ditafsirkan sebagai urutan ESC dari tombol fungsi dan urutan ESC ini akan dibandingkan dengan string yang diketahui dari keamanan ESC dari terminfo atau termcap basis data (tergantung pada level rendah mana yang digunakan).

Tentu ini menjengkelkan untuk aplikasi di mana ESC digunakan sendiri, tapi saya tidak tahu solusi untuk ini.

Mengenai pertanyaan Anda dengan perilaku ESC a= Meta a:

Kunci met tidak tersedia dengan semua keyboard. Sebagai solusinya sering diperbolehkan untuk menggunakan kunci ESC untuk ditekan sebelum tombol lainnya.

ktf
sumber
Terima kasih atas penjelasannya ktf. Penundaan tidak ada di gvim, hanya di terminal (saya memeriksa tanpa tmux dan penundaan masih ada).
Shrikant Sharat
gvim tidak mengalami masalah ini, karena ia mendapat informasi kunci mana yang ditekan dari server X11 (sehingga ia tidak harus menguraikan urutan ESC).
ktf
Ok, jadi saya perlu membuat terminal gnome saya berperilaku dengan cara yang sama.
Shrikant Sharat
terminal gnome bukanlah masalahnya - masalah yang dijelaskan hanya memengaruhi program yang berjalan pada terminal (atau dalam emulasi Terminal) dan harus menguraikan kunci fungsi. Anda akan mengalami perilaku yang sama, jika Anda mencoba xterm atau KDE-Terminal misalnya.
ktf
2
"Kunci Meta tidak tersedia dengan semua keyboard. Sebagai solusinya, sering kali dibolehkan menggunakan kunci ESC untuk ditekan sebelum tombol lainnya." Mungkin bahkan sebelum itu, mereka sering hanya memiliki antarmuka data tujuh-bit; tidak ada "meta bit" yang kedelapan, jadi Anda harus mengirim ESC untuk Meta. Dan saat ini UTF-8 tersebar luas, sehingga bahkan dengan koneksi delapan-bit Anda tidak dapat menggunakan bit tinggi untuk Meta.
Chris Page
3

Meskipun ini mungkin tidak secara langsung memperbaiki masalah Anda, saya telah menemukan bahwa saya dapat menggunakan <Ctrl> cuntuk keluar dari mode penyisipan. Ini juga dapat digunakan untuk keluar dari pengguliran layar tmux (yang dapat dipanggil menggunakan <leader> PgUP)

dtyler
sumber
3
Saya tidak akan merekomendasikan penggunaan <C-c>untuk keluar dari mode penyisipan dalam penggunaan biasa karena tidak menjalankan perintah otomatis InsertLeaveyang mungkin ditonton oleh beberapa plugin. Lihat :h i_CTRL-C.
Shrikant Sharat