ESC anahtarı, Alt + davranışından dolayı terminalde küçük bir gecikmeye neden olur


67

Terminal kurulumum, gnome-terminal + tmux + zsh olup vi bindings.

Vim gibi uygulamalarda veya hatta zsh komut satırında vi düzenleme modunda, sık sık ESCtuşa basmam gerekir, ancak bu tuşun etkileri gerçekleşmeden önce küçük bir gecikme var. GNU Ekranına bakın Vim ESC tuşunu yavaşlatır

Bazı deneylerden sonra, vurma ESCtuşuna basıldığını ve hemen başka bir tuşun (diyelim b) vurma ile aynı etkiye sahip olduğunu buldum Alt+b. Neden böyle olduğunu bilmiyorum (büyük olasılıkla hiçbir zaman eski nedenlerden dolayı Alt? Bilmiyorum). Her iki durumda da iki Altanahtarım var ve bu davranışı ESCanahtarımla istemiyorum . Ben de denedim C+[ve onunla da aynı problem.

Gnome-terminal veya tmux veya işletim sistemimin kendisinden (Ubuntu Natty) kimin sorumlu olduğundan emin değilim. Bu konunun nasıl ele alınacağına dair herhangi bir fikir çok iyi olurdu.

Güncelleme : Farklı bir terminalde (LXTerminal) tmux olmadan kontrol ettim ve gecikme de orada mevcut.


1
Vim'imin neden garip davrandığını anlayamadım. Bu soru bana sadece ekranda kullanmaya başladığımı hatırlattı. Akıl sağlığımı kurtardın.
pabo

Yanıtlar:


111

İşte gerçek bir düzeltme. Aşağıdakileri ekleyin .tmux.conf:

set -s escape-time 0

4
Mükemmel, teşekkürler! Vim'de insert modunu bırakırken bir gecikme vardı ve gerçekten tmux'un müdahale edebileceğini düşünmemişti. Bu hile yaptı
actionshrimp

7
Superuser.com/questions/252214/… de belirtildiği gibi tmux kill-server, bunun etkili olması için yapmak zorunda kaldım .
PhilT

Bash'da vi modunu kullanırken ekleme modundan komut moduna geçerken neden bir gecikme olduğunu anlamaya çalışan bu sayfaya gelenler için, bkz. Superuser.com/a/1161871/236677
Kvass

3
Tmux içindeki komut istemini tmux-prefix(varsayılan Ctrl+b) :ve ardından girerek yapılandırma dosyasını yeniden yükleyebilirsiniz source-file $HOME/.tmux.conf.
Folfy

7

Gecikme, bir fonksiyon tuşuna basılıp basmamaya karar vermesi gerekebilecek giriş rutinlerinden kaynaklanır. Bunun için giriş rutini, bir ESC karakterinde okuduğunda bir zamanlayıcı başlatır. Zamanlayıcı bitmeden önce girdiden okunan karakterler (saniyenin onda birini söyleyelim) daha sonra bir işlev tuşunun ESC dizisi olarak yorumlanır ve bu ESC dizisi terminfodan veya diziden bilinen ESC dizileri dizileriyle karşılaştırılır. termcap veri tabanı (hangi düşük seviyeli rutinlerin kullanıldığına bağlıdır).

Tabii ki bu ESC'nin kendi başına kullanıldığı uygulamalar için can sıkıcı bir durum, ancak bunun için herhangi bir geçici çözüm bilmiyorum.

Sorunuzla ilgili olarak ESC a= Meta a: davranışı

Meta tuşlar tüm klavyelerde mevcut değildi. Geçici bir çözüm olarak, genellikle diğer tuştan önce basılacak ESC tuşunu kullanmasına izin verildi.


Açıklama ktf için teşekkür ederim. Gecikme gvimde yok, sadece terminalde (tmux olmadan kontrol ettim ve gecikme hala orada).
Shrikant Sharat 23:11

gvim bu problemden muzdarip değildir, çünkü X11 sunucusundan hangi tuşa basıldığı bilgisini alır (bu yüzden ESC sekanslarını ayrıştırması gerekmez).
ktf

Tamam, öyleyse GNOME terminalimin aynı şekilde davranmasına ihtiyacım var.
Shrikant Sharat

gnome-terminal sorun değildir - açıklanan sorun çalışan tek programları etkiler üzerinde bir terminalde (veya bir Terminal öykünme olarak) ve fonksiyon tuşları ayrıştırması gerekir. Örneğin, xterm veya KDE-Terminal'i denerseniz aynı davranışla karşılaşacaksınız .
ktf

2
"Meta tuşlar tüm klavyelerde mevcut değildi. Çözüm olarak, diğer tuşlardan önce basılması gereken ESC tuşunu kullanmasına genellikle izin verildi." Belki de bundan önce, ttylerin çoğu zaman sadece yedi bitlik veri arayüzleri vardı; sekizinci "meta bit" yoktu, bu yüzden Meta için bir ESC göndermek zorundaydın. Günümüzde UTF-8 yaygındır, bu yüzden sekiz bit bağlantılarda bile Meta için yüksek biti kullanamazsınız.
Chris Page

3

Bu doğrudan sorununuzu <Ctrl> cçözmese de, ekleme modundan çıkmak için kullanabileceğimi öğrendim. Bu, tmux’un ekran kaydırmasından çıkmak için de kullanılabilir (kullanılarak çağrılabilir <leader> PgUP)


3
Bazı eklentilerin izleyebileceği otomatik komutu <C-c>çalıştırmadığından normal kullanımda insert modundan çıkmayı tavsiye etmem InsertLeave. Bakın :h i_CTRL-C.
Shrikant Sharat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.