Il tasto ESC provoca un piccolo ritardo nel terminale a causa del suo comportamento Alt +


68

La mia configurazione del terminale è gnome-terminal + tmux + zsh con collegamenti vi.

In applicazioni come vim o anche nella modalità di modifica vi della riga di comando di zsh, devo premere frequentemente il ESCtasto, ma c'è un piccolo ritardo prima che si verifichino gli effetti di questo tasto. Vedere la schermata GNU rallenta il tasto Vim ESC

Dopo un po 'di sperimentazione, ho scoperto che premere il ESCtasto e immediatamente un altro tasto (diciamo b) ha lo stesso effetto del colpo Alt+b. Non so perché questo sia il caso (probabilmente per motivi legati al passato quando non c'era Alt? Non lo so). Ad ogni modo, ho due Altchiavi e non voglio questo comportamento con la mia ESCchiave. Ho provato con C+[ed è lo stesso problema anche con quello.

Non sono sicuro di chi sia responsabile di questo, gnome-terminal o tmux o del mio stesso sistema operativo (Ubuntu Natty). Qualsiasi idea su come affrontare questo sarebbe grande.

Aggiornamento : ho controllato senza tmux su un altro terminale (terminale LX) e il ritardo è presente anche lì.


1
Non riuscivo a capire perché il mio film si comportasse in modo strano. Questa domanda mi ha fatto ricordare che avevo appena iniziato a usarlo all'interno dello schermo. Mi hai salvato la sanità mentale.
pabo,

Risposte:


112

Ecco una soluzione reale. Aggiungi quanto segue a .tmux.conf:

set -s escape-time 0

4
Fantastico, grazie! Ho avuto un ritardo nel lasciare la modalità insert in vim e non avevo davvero pensato che avrebbe potuto interferire. Questo ha fatto il trucco
actionhrimp

7
Come menzionato in superuser.com/questions/252214/…, ho dovuto fare tmux kill-serverin modo che questo avesse effetto.
PhilT,

Per chiunque sia arrivato a questa pagina cercando di capire perché c'è un ritardo nel passaggio dalla modalità di inserimento alla modalità di comando mentre si utilizza la modalità vi in ​​bash, vedere superuser.com/a/1161871/236677
Kvas

3
È possibile ricaricare il file di configurazione aprendo il prompt dei comandi all'interno di tmux con tmux-prefix(predefinito Ctrl+b) seguito da :e inserendo source-file $HOME/.tmux.conf.
Folfy,

7

Il ritardo è causato dalle routine di input che potrebbero dover decidere se è stato premuto o meno un tasto funzione. Per questo la routine di input avvia un timer ogni volta che legge un carattere ESC. I caratteri che vengono letti dall'ingresso prima che scada il tempo (diciamo un decimo di secondo) vengono quindi interpretati come sequenza ESC di un tasto funzione e questa sequenza ESC verrà confrontata con stringhe note di secrezioni ESC dal terminfo o dal base di dati termcap (dipende da quali routine di basso livello vengono utilizzate).

Di certo questo è fastidioso per le applicazioni in cui ESC viene utilizzato da solo, ma non conosco alcuna soluzione alternativa per questo.

Per quanto riguarda la tua domanda con il comportamento di ESC a= Meta a:

I tasti meta non erano disponibili con tutte le tastiere. Per ovviare al problema, è stato spesso permesso di utilizzare il tasto ESC da premere prima dell'altro tasto.


Grazie per la spiegazione ktf. Il ritardo non è presente in gvim, solo nel terminale (ho controllato senza tmux e il ritardo è ancora lì).
Shrikant Sharat,

gvim non soffre di questo problema, perché ottiene le informazioni su quale tasto è stato premuto dal server X11 (quindi non deve analizzare le sequenze ESC).
ktf,

Ok, quindi devo fare in modo che il mio terminale gnome si comporti allo stesso modo allora.
Shrikant Sharat,

il terminale gnome non è il problema: il problema descritto riguarda solo i programmi in esecuzione su un terminale (o in un'emulazione Terminale) e deve analizzare i tasti funzione. Si verificherà lo stesso comportamento, ad esempio se si prova xterm o KDE-Terminal.
ktf,

2
"I tasti meta non erano disponibili con tutte le tastiere. Per ovviare al problema, era spesso consentito utilizzare il tasto ESC per essere premuto prima dell'altro tasto." Forse anche prima di questo, ttys aveva spesso solo interfacce dati a sette bit; non esisteva l'ottavo "meta bit", quindi è stato necessario inviare un ESC per Meta. E oggi UTF-8 è molto diffuso, quindi anche con connessioni a otto bit non è possibile utilizzare il bit alto per Meta.
Chris Page

3

Anche se questo potrebbe non risolvere direttamente il tuo problema, ho scoperto che posso usare <Ctrl> cper uscire dalla modalità di inserimento. Questo può anche essere usato per uscire dallo scorrimento dello schermo di tmux (che può essere invocato usando <leader> PgUP)


3
Non consiglierei di usarlo <C-c>per uscire dalla modalità di inserimento nell'uso regolare poiché non esegue il InsertLeavecomando automatico che alcuni plugin potrebbero essere alla ricerca. Vedere :h i_CTRL-C.
Shrikant Sharat,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.