Ambiente:
- Fedora 25 (4.9.12-200.fc25.x86_64)
- Terminale GNOME 3.22.1 Uso della versione 0.46.1 + GNUTLS di VTE
- VIM - Vi IMproved 8.0 (12 settembre 2016, compilato il 22 febbraio 2017 16:26:11)
- tmux 2.2
Di recente ho iniziato a utilizzare tmux e ho osservato che i colori all'interno di Vim cambiano a seconda che stia correndo all'interno o all'esterno di tmux. Di seguito sono riportati screenshot di Vim all'esterno (a sinistra) e all'interno (a destra) di tmux durante la visualizzazione di un diff Git:
La mia TERM
variabile è
- Fuori dal tmux:
xterm-256color
- All'interno di tmux:
screen-256color
Vim riporta questi tipi di terminali come previsto (via :set term?
):
- Fuori dal tmux:
term=xterm-256color
- All'interno di tmux:
term=screen-256color
Vim riporta anche che entrambe le istanze sono in esecuzione in modalità 256 colori (via :set t_Co?
):
- Fuori dal tmux:
t_Co=256
- All'interno di tmux:
t_Co=256
Ci sono molte domande simili in merito al far funzionare Vim in modalità 256 colori all'interno di tmux (la migliore risposta che ho trovato è qui ), ma non credo che sia il mio problema date le informazioni di cui sopra.
Posso duplicare il problema al di fuori di tmux se eseguo Vim con il tipo di terminale impostato su screen-256color
:
$ TERM=screen-256color vim
Questo mi fa credere che c'è semplicemente una differenza tra le capacità del terminale xterm-256color
e screen-256color
quella che causa la differenza di colore. Il che porta alla domanda posta nel titolo: cosa specificatamente nelle capacità del terminale fa sì che i colori di Vim siano diversi? Vedo le differenze tra correre :set termcap
dentro e fuori di tmux, ma sono curioso di sapere quali variabili causino effettivamente la differenza nel comportamento.
Indipendentemente dalla domanda precedente, è possibile che i colori di Vim siano coerenti quando si esegue all'interno o all'esterno di tmux? Alcune cose che ho provato includono:
- Impostazione esplicita del terminale predefinito che tmux utilizza
~/.tmux.conf
su vari valori (alcuni contro il parere delle FAQ di tmux ):
imposta -g default-terminal "screen-256color" set -g default-terminal "xterm-256color" set -g default-terminal "screen.xterm-256color" set -g default-terminal "tmux-256color"
- Avvio di tmux utilizzando
tmux -2
.
In tutti i casi, Vim ha continuato a mostrare colori diversi all'interno di tmux.
xterm-256color
versione (cercare "38; 5;" nel file), ma non riesco a screen-256color
. Ad esempio, ovunque sia presente un \e[38;5;81m
in xterm-256color
(colore # 81 della tavolozza a 256 colori, una tonalità blu centrale), screen-256color
contiene \e[34m
invece (il blu standard della tavolozza a 8 colori). Quindi la domanda principale è perché Vim non usa la tavolozza a 256 colori in caso di TERM=screen-256color
.
xterm-256color
versione sembra stampare lo schermo due volte, prima con i colori legacy e poi con la tavolozza a 256 colori. Cerca ad esempio "F1" nel file, troverai due corrispondenze in xterm-256color
, la prima con il \e[34m
colore, la seconda con \e[38;5;81m
. Non so cosa stia succedendo qui.
set -g default-terminal "screen.xterm-256color"
in ~/.tmux.conf
e ricaricare il config nella tmux (<Cs>: fonte-file ~ / .tmux.conf) ha lavorato per me (problema evidenziare). thx
script
, avviarevim
, chiuderevim
e quindi chiuderescript
la shell e allegare iltypescript
file risultante ? Quindi ripetere gli stessi passaggi conTERM=screen-256color vim
invece.