Perché i colori Vim hanno un aspetto diverso all'interno e all'esterno di tmux?


29

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:

inserisci qui la descrizione dell'immagine

La mia TERMvariabile è

  • 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-256colore screen-256colorquella 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 termcapdentro 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.confsu 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.


Potresti per favore avviare script, avviare vim, chiudere vime quindi chiudere scriptla shell e allegare il typescriptfile risultante ? Quindi ripetere gli stessi passaggi con TERM=screen-256color viminvece.
egmont,


1
Riesco a vedere sequenze di escape a 256 colori nella xterm-256colorversione (cercare "38; 5;" nel file), ma non riesco a screen-256color. Ad esempio, ovunque sia presente un \e[38;5;81min xterm-256color(colore # 81 della tavolozza a 256 colori, una tonalità blu centrale), screen-256colorcontiene \e[34minvece (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.
egmont,

Un'altra cosa interessante è che la xterm-256colorversione 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[34mcolore, la seconda con \e[38;5;81m. Non so cosa stia succedendo qui.
egmont,

Aggiunta set -g default-terminal "screen.xterm-256color"in ~/.tmux.confe ricaricare il config nella tmux (<Cs>: fonte-file ~ / .tmux.conf) ha lavorato per me (problema evidenziare). thx
dtrckd

Risposte:



17

Ho avuto il problema simile prima. I commenti in blu in Vim erano difficili da leggere. In .tmux.confho impostato questo:

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

E in .vimrc:

set background=dark

Ora appare come segue e funziona sia in Gnome Terminal che in Cygwin: inserisci qui la descrizione dell'immagine


3
Questo mi ha risolto. Per qualche motivo, all'interno di tmux, Vim non stava rilevando uno sfondo scuro. L'impostazione esplicita bg=darknel mio vimrc l'ha risolto.
Adam Keenan,

Strano - $TERMsia il mio interno che l'esterno sono tmuxstati "xterm-256color"e l'impostazione esplicita del backgroun lo ha fatto anche per me. Grazie!
nronnei,

Ha funzionato anche per me. Ho pensato che il problema fosse sttermdovuto al fatto che in xfce4-terminaltutto sembrava comodo (i commenti che appaiono cyaninvece dei bluequali è molto difficile da leggere con uno sfondo scuro). dopo questo cambiamento tutto funziona bene. Ma ricorda di aggiungere unlet! skip_defaults_vim source $VIMRUNTIME/defaults.vimal file vimrc per usare l'evidenziazione della sintassi ecc ...
Abinash Dash

2

Grazie all'analisi di @ egmont sui colori che Vim stava presentando quando TERM=screen-256color, sono stato ispirato a guardare la combinazione di colori che Vim sta usando nei due scenari.

Vim riferisce che sta usando la defaultcombinazione di colori in entrambi i casi. Ho pensato che strano perché la defaultcombinazione di colori su Fedora 25 ( /usr/share/vim/vim80/colors/default.vim) non sembra corrispondere ai colori che vedo quando TERM=xterm-256color. Se imposto esplicitamente la combinazione di colori usando :colorscheme defaultquando TERM=xterm-256color, l'aspetto di Vim cambia in quello quando TERM=screen-256color. Per riportare i colori a quello che erano al primo avvio di Vim, ho dovuto usare la roncombinazione di colori. Progresso!

Ho trovato una risposta Ask Ubuntu che suggerisce che quando Vim segnala che sta usando la defaultcombinazione di colori, non significa necessariamente default.vimma piuttosto una combinazione di colori specifica per il tema. Come sottolinea la risposta, un tema scuro (che sto usando) corrisponde alla combinazione di roncolori, proprio come ho scoperto sopra. (Anche se questo post è relativo a Ubuntu, suppongo che l'OP stesse usando GNOME.)

Ho anche trovato un'altra domanda che sembra descrivere lo stesso problema che sto riscontrando . L'ho trovato durante la ricerca prima di pubblicare questa domanda, ma, per qualche ragione, la combinazione di colori non mi ha ritenuto rilevante.

Ho finito per fare ciò che ha fatto @LapshinDmitry nella sua risposta e colorscheme ronho impostato esplicitamente il mio ~/.vimrcfile. Ora, se inizio Vim dentro o fuori di tmux, i colori appaiono uguali. L'unico inconveniente è se cambio mai il tema del desktop da un sapore scuro a un sapore chiaro, Vim non passerà automaticamente alla combinazione di colori del tema chiaro "predefinita", che a quanto pare peachpuff. Posso conviverci, poiché è improbabile che cambi mai il mio tema.

Non accetterò questa risposta perché considero esplicitamente impostare la combinazione di colori nella mia ~/.vimrcsoluzione alternativa piuttosto che nella soluzione. Se qualcuno può spiegare perché Vim carica una diversa combinazione di colori "predefinita" a seconda del valore di TERM, sarò felice di accettare quella risposta, poiché sono più interessato a capire la causa principale. Ho il sospetto che abbia qualcosa a che fare con il modo in cui Vim interpreta le capacità del terminale tra i due file terminfo.


Sono anche curioso di vimsapere perché si comporta in questo modo. Dopotutto, la bcecapacità non dovrebbe avere nulla a che fare con il numero di colori disponibili.
egmont,

@egmont Ho interpretato la risposta di ThomasDickey come: 1) Vim verifica la bcecapacità del terminale, 2) se presente, seleziona la combinazione di colori "A", 3), altrimenti seleziona la combinazione di colori "B". Credo il colore di profondità è la stessa in entrambi i casi (ad esempio 256 colori, come t_Comostra). È solo che la combinazione di colori "B" sul mio sistema utilizza solo una tavolozza di 8 colori anche se sono possibili 256 colori ( penso che spieghi ciò che hai osservato nell'analisi del tuo dattiloscritto; per favore correggimi se sbaglio). Ricorda, dopo l'esecuzione :colorscheme ron, vedo sequenze di escape a 256 colori nella stessa sessione di Vim.
Rusty Shackleford

Grazie per la spiegazione - non riesco ancora a vedere alcuna logica dietro questo. Non importa. vimha decisioni di design davvero strane.
egmont

0

La mia variabile TERM è Outside tmux: xterm-256color Inside tmux: screen-256color

È corretto e funziona per me. Provalo con un altro terminale (io uso urxvt) per vedere se Gnome Terminal è il problema. 

Controlla anche COLORTERM(il mio è impostato su rxvt) e unset TERMCAP.


Grazie per i suggerimenti Ho eseguito lo stesso test con urxvt (l'esterno TERM è rxvt-unicode-256color) utilizzando un appropriato ~/.Xdefaultse purtroppo ho ancora osservato colori diversi all'interno e all'esterno di tmux. Per lo scenario gnome-terminal, COLORTERMè truecolored TERMCAPè vuoto sia dentro che fuori da tmux. Per lo scenario urxvt, COLORTERMè dentro rxvt-xpme fuori da truecolortmux, mentre TERMCAPè vuoto sia dentro che fuori da tmux.
Rusty Shackleford

@RustyShackleford questo è solo per Vim? Stai usando 'termguicolors'? Dai un'occhiata :help xterm-true-coloro prova con una configurazione Vim più predefinita.
Laktak,

Finora ho notato solo il problema in Vim (come ho detto, solo di recente ho iniziato a usare tmux). Ad esempio, il mio prompt dei terminali e l'output della CLI di Git sembrano avere gli stessi colori sia all'interno che all'esterno di tmux. Non ho impostato il termguicolorsmio .vimrce :set termguicolors?segnala notermguicolorsin entrambi i casi. Esaminerò l'argomento della guida a cui hai fatto riferimento; Grazie!
Rusty Shackleford

0

Per il mio riferimento in seguito, quando indubbiamente google questa impostazione per la mia prossima macchina.

  • Vim8 / Neovim
  • Windows 10
  • Git bash
  • Tmux 2.7

Utilizzare queste istruzioni per ottenere i binari e le DLL necessari nel PERCORSO di Git bash:

https://blog.pjsen.eu/?p=440

Utilizzare questi comandi per configurare:

echo 'set -g default-terminal "screen.xterm-256color"' > ~/.tmux.conf
tmux -2u
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.