Come ottenere maiusc + frecce e ctrl + frecce che funzionano in Vim in tmux?


44

Questo è tutto in iTerm2 su OS X.

avevo

export TERM='xterm-256color'

nel mio .bashrc. Ciò significava che Vim in tmux utilizzava 256 colori.

E una volta ho aggiunto

set -g xterm-keys on

quindi le scorciatoie da tastiera con modificatori funzionavano bene in Vim. Vale a dire: shift+left/rightche ho mappato per cambiare le schede di Vim, ctrl+up/downche ho mappato per spostare le linee ("bolla") e shift+left/rightche ha funzionato fuori dalla finestra per saltare di parola in modalità riga di comando (ad esempio quando si digita qualcosa di simile :e foo bar baz).

Tuttavia, questa configurazione aveva il problema che il colore di sfondo di Vim mostra solo dietro il testo, come menzionato qui .

Quindi ho rimosso

export TERM='xterm-256color'

dal mio .bashrce invece inseriscilo nel mio .tmux.conf:

set -g default-terminal "screen-256color"

Ciò ha corretto il colore di sfondo di Vim, ma ha rotto le scorciatoie da tastiera: fanno invece cose inaspettate (sposta il cursore, elimina il testo).

Usando ctrl+vper inserire l'output testuale delle combinazioni di tasti (come descritto qui ), sono stato in grado di aggirare il problema:

map [1;5A <C-Up>
map [1;5B <C-Down>
map [1;2D <S-Left>
map [1;2C <S-Right>
cmap [1;2D <S-Left>
cmap [1;2C <S-Right>

Questo fa funzionare le scorciatoie, ma non sembra la soluzione giusta. Qualcuno potrebbe dirmi cosa sta succedendo qui e come risolverlo?

Risposte:


68

È necessario impostare l' opzione della finestra di tmux inxterm-keys modo che tmux passi queste chiavi ai suoi terminali. Probabilmente vuoi metterlo nel tuo ~/.tmux.conf:

set-window-option -g xterm-keys on

Vim di solito imposta automaticamente la gestione di questi tasti quando TERM è xterm-qualcosa, ma lo salta poiché TERM è screen-256color. È possibile configurare manualmente questi tasti in ~/.vimrcquesto modo:

if &term =~ '^screen'
    " tmux will send xterm-style keys when its xterm-keys option is on
    execute "set <xUp>=\e[1;*A"
    execute "set <xDown>=\e[1;*B"
    execute "set <xRight>=\e[1;*C"
    execute "set <xLeft>=\e[1;*D"
endif

Almeno in questo modo non è necessario mappare tutte le varie combinazioni.


Grazie! Sembra migliore di quello che avevo e apprezzo la spiegazione. Una cosa che è stata risolta da ciò che avevo, ma non dalle tue linee, era che le frecce su / giù non funzionavano nel plugin Command-T come descritto qui: superuser.com/questions/237751/… Ho appena aggiunto map <Esc>[B <Down>da uno delle risposte. Sembra che ci siano alcune ipotesi sbagliate fatte dal plugin stesso.
Henrik N,

Giusto per essere chiari, la tua soluzione plus map <Esc>[B <Down>da quell'altro thread significa che tutto ora funziona bene.
Henrik N,

@HenrikN Potresti chiarire cosa map <Esc>[B <Down>fa? Non vedo alcuna differenza aggiungendolo al mio file .vimrc.
Francesco Boccardo,

@Francesco Boccardo: se segui il link nel mio commento precedente e poi segui di nuovo il link da lì, arrivi a superuser.com/a/215181 che sembra spiegarlo in dettaglio lancinante :)
Henrik N,

@HenrikN Grazie. Quindi è probabilmente un problema relativo a OSX, o forse è stato risolto in questi 7 anni, perché premendo command (control?) + R non confonde i tasti freccia in vim in tmux per me (sono su Linux).
Francesco Boccardo,

8

Come spiegato qui , disabilitare la cancellazione del colore di sfondo (BCE) deselezionando l' t_utopzione del terminale (eseguire :set t_ut=in Vim e quindi premere Control+ Lper aggiornare il display del terminale) in modo che le combinazioni di colori funzionino correttamente quando Vim viene utilizzato all'interno dello schermo di tmux e GNU.

In questo modo, puoi mantenere il tuo TERMvalore xterm-256colorper quanto riguarda il corretto rilevamento dei tasti e ottenere anche il corretto rendering delle combinazioni colori di Vim! :-)


1
Bellissimo! Ottimo lavoro investigativo.
Henrik N

2
Questo è quello che ho cambiato esattamente: github.com/henrik/dotfiles/commit/… I colori e i tasti modificatori sembrano funzionare bene sia all'interno che all'interno di tmux.
Henrik N
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.