Leggero ritardo quando si cambia modalità in vim usando tmux o schermo


68

Il passaggio da e verso la modalità di inserimento in Vim non è più istantaneo poiché utilizzo tmux. Dopo aver premuto Escin modalità inserimento, è necessario un notevole lasso di tempo per uscire effettivamente dalla modalità inserimento. Dopo aver premuto Esce in seguito qualsiasi altro tasto, l'interruttore è immediato e Escviene eseguito il comando per il tasto premuto dopo . Qualche idea di cosa potrebbe causare questo?

La configurazione di Vim non è il problema in quanto il ritardo non si verifica quando eseguo Vim fuori da tmux, quindi questo è probabilmente correlato a tmux in qualche modo. Uso gnome-terminal a proposito.

Inoltre vale la pena notare, sembra che non riesco a definire le associazioni chiave in tmux per Esc, il mio piano era di legare Esca:

bind Escape send-keys ^[

Ahimè, sembra che tutto ciò che lega a Esctmux non funzioni. Lo stesso problema si verifica anche sullo schermo.

Risposte:


122

Dopo aver sfogliato le pagine man risulta che tmux ha un'opzione per questo. Quanto segue ~/.tmux.confrisolve il problema del ritardo:

 set -sg escape-time 0

Devi riavviare il tuo server tmux o ricaricare la tua configurazione affinché questo abbia effetto. Per fare ciò, emettere source-file ~/.tmux.confdal prompt di tmux.


2
dove lo hai trovato? Non riesco a trovare il tempo di fuga da nessuna parte man tmuxe il comando non funziona per me.
djeikyb,

Sospetto che sia disponibile solo nella versione di sviluppo. Puoi ottenerlo qui: github.com/ThomasAdam/tmux
Ton van den Heuvel

5
Ho dovuto usare il kill-server di tmux prima che questa impostazione funzionasse per me. Grazie!
Sam,

1
Questo mi fa venire voglia di darti 10 voti. Trovato questo dopo un'ora di combattimenti timeout in vim. Grazie!
Malvim,

1
@MichaelBrown, lo faccio anch'io e continuo a risolvere questo problema. In realtà non dovrebbe importare, perché lo stesso codice chiave viene inviato all'emulatore di terminale indipendentemente dal fatto che si prema escape o ^ [.
Ton van den Heuvel,

4

Ho avuto un problema diverso ma simile che stavo cercando di risolvere quando ho trovato questa pagina, quindi lo posterò qui nel caso in cui sia utile a chiunque sia alla ricerca di questa risposta e trovi questa pagina allo stesso modo.

Problema: la modalità vi in ​​bash ha un ritardo nel passaggio dalla modalità di inserimento alla modalità di comando

Soluzione: nel ~/.inputrcfile, aggiungi set keyseq-timeout ndove nè presente un valore basso maggiore di 0. Il nvalore predefinito è 500 ms, che è ciò che causa il ritardo. Vedi la documentazione qui .

Inoltre, se vuoi essere in grado di dire in quale modalità sei, controlla la forchetta di bash di Dylan Cali .


è molto utile, l'ho impostato su 0.01e ora è piacevolmente molto più veloce. Grazie!

Potrebbe anche essere aggiunto in /etc/inputrcper renderlo disponibile per tutti gli utenti.

1

Sembra che tu stia utilizzando una mappatura che inizia con ESC. Quando si preme ESC, vim deve attendere per vedere se il tasto successivo è quello nella mappatura. In caso contrario, può continuare immediatamente.

La configurazione di vim può dipendere dal terminale, quindi il fatto che non avvenga al di fuori di tmux non significa molto. Vim può interrogare la $TERMvariabile d'ambiente e scegliere una configurazione diversa a seconda del suo valore.

Dato che gnome-terminal utilizza AFAIK xtermcome valore della $TERMvariabile e tmux utilizza screen, guarderei tutti i file di configurazione di VIM per le impostazioni che vengono utilizzate solo se la $TERMvariabile è uguale a screen. La mia ipotesi è che alcuni file di configurazione di VIM sul tuo sistema impostino i mapping per la gestione dei tasti freccia (quelli iniziano con il ESCcarattere) quando il terminale è screen.

Puoi testarlo modificando temporaneamente la $TERMvariabile in tmux prima di avviare vim. Se la tua shell è bash, chiama vim as

TERM=xterm vim

in tmux e vedere se il problema persiste. Tuttavia, non è possibile utilizzarlo come soluzione, poiché potrebbero esserci differenze tra le funzionalità terminali di tmux e xterm e si potrebbero riscontrare alcuni problemi.


Alcuni buoni suggerimenti qui. Uso bash, ma sfortunatamente TERM=xterm vimnon ho risolto il problema. Dovrò scavare un po 'più a fondo.
Ton van den Heuvel

1

Come il titolo menziona Screen, ecco la soluzione per correggere il comportamento del tasto Escape all'interno di GNU Screen. (Tratto da qui .)

Inserisci

maptimeout 5

per .screenrcconfigurare il file.

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.