perde il colore vim in modalità tmux


228

Sto eseguendo iterm2 e quando sono in modalità tmux, lo schema dei colori che ho impostato in VIM non viene visualizzato. Solo la combinazione di colori che ho impostato in iterm. Se corro vim dalla shell, il colorscheme appare corretto - è solo quando sono in modalità tmux.

Ho provato a impostare :colorscheme molokaiquando in vim (vedi screenshot sotto) e non cambia - ancora una volta, il colore predefinito per iterm2 rimane.

Mi manca qualche impostazione su iterm o tmux.conf? Le mie chiazze sono su Github qui.


31
Cosa succede quando lo fai $ tmux -2?
Romainl,

4
È stato totalmente. Cos'è la bandiera -2?
tristen,

11
Costringe tmux a lavorare con 256 colori.
Romainl,

Risposte:


252

Ho avuto lo stesso problema. L'unica differenza era che sto usando solarizepiuttosto allora molokai.

Per risolvere il problema, ho impostato un alias in ~/.bashrc:

alias tmux="TERM=screen-256color-bce tmux"

E imposta l' default-terminalopzione in ~/.tmux.conf:

set -g default-terminal "xterm"

Infine, fai $ source ~/.bashrcper caricare un nuovo alias.


20
Uso questo invece di tmux -2questo perché è più dettagliato.
Thameera,

97
Personalmente ho dovuto usare set -g default-terminal "screen-256color"per lavorare piuttosto che xtermsu OS X, sparso in una scatola Ubuntu. Ho fatto riferimento a questo sito: rhnh.net/2011/08/20/vim-and-tmux-on-osx
waffl

7
L'alias qui non ha senso: sta fingendo di essere in esecuzione all'interno dello schermo o di tmux, il che non è quasi mai il caso. Dire a tmux di supporre che il terminale in cui è in esecuzione supporti 256 colori, run tmux -2o tmux -2 attach(tmux decide ogni volta che si collega una sessione nuova o esistente a un terminale). Un alias ragionevole sarebbe alias tmux='tmux -2'. Vedi anche tmux, TERM e supporto 256 colori
Gilles 'SO- smetti di essere malvagio'

3
Ho letto in un'altra risposta (non sono riuscito a trovare il riferimento) che non era una buona pratica forzare il TERM, anche se non lo so per certo. Dal momento che l' tmux -2opzione con il ha set -g default-terminal "screen-256color"funzionato per me, questa sarà la mia scelta. Ma grazie comunque!
marcelocra,

5
Se l' .tmux.confimpostazione non sembra avere effetto, chiudere tutti i processi tmux e riavviare. Puoi semplicemente fare a set -g default-terminal "screen-256color"meno di impostare un alias .bashrc. Penso che le persone stiano eseguendo soluzioni alternative come l'alias delle variabili di ambiente perché non stanno chiudendo tutti i processi tmux dopo la configurazione .tmux.conf.
Chev,

74

Come menzionato sopra @romainl, ho dovuto forzare tmux a usare 256 colori aggiungendo il -2flag:

$ tmux -2

Ho aggiunto alias tmux='tmux -2'al mio bash_profile, quindi non dimentico :)


In realtà, non è affatto obbligatorio: non uso -2ma ho 256 colori che funzionano in Vim in tmux.
romainl,

@romainl È necessario se tmux non rileva il terminale con 256 colori, il che è abbastanza comune.
Gilles 'SO-smetti di essere malvagio' l'

1
@Gilles, Vim non rileva che il terminale supporta 256 colori perché l'impostazione predefinita di tmux TERMè screen. -2non cambia TERMe non cambia nulla di colore in relazione alle informazioni che Vim ottiene dal suo ambiente: :echo &t_Coritorna ancora 8. Con le informazioni fornite, Vim fa la cosa giusta. Le uniche cose che devono essere impostate sono 1. l'emulatore di terminale TERMsu xterm-256coloro un valore equivalente come urxvt-unicode-256colore 2. impostazione predefinita di tmux TERMcon set -g default-terminal "screen-256color".
rom

@romainl La maggior parte degli ambienti ha TERMimpostato xterm, non xterm-256color, quindi la necessità di eseguire tmux -2(o TERM=xterm-256color tmux, o modificare il termcap o altri modi per ottenere la stessa cosa).
Gilles 'SO-smetti di essere malvagio' l'

1
@Gilles, il problema è che -2 non realizza nulla che abbia alcun impatto sul comportamento di Vim riguardo al supporto a 256 colori perché l'unica cosa che conta per Vim è il tuo TERM e che deve essere impostato alla fine della catena: nella tua emulatore di terminale. Se SSH attraverso 5 host e il tuo terminale è impostato correttamente, Vim lanciato sul 5 ° host vedrà il tuo TERM a 256 colori e agirà di conseguenza. Se usi tmux in qualsiasi punto della catena -2 non avrà alcun impatto sul comportamento di Vim perché tutto ciò che vede è che il suo ambiente è limitato a 8 colori a causa del TERM predefinito di tmux: schermo, -2 o no.
rom

72

Ho provato tutte le soluzioni sopra e quello che alla fine ha funzionato per me è inserire le seguenti righe .tmux.conf:

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

Sto usando tmux tramite SSH e questo è anche ciò che ha funzionato per me anche se non sto usando xterm, solo SSH normale.
armen.shimoon,

Non lo usavo su SSH e questa era l'unica risposta che funzionava per me. Sessione iTerm locale in OSX 10.9.5.
Chev,

Questo funziona per me (MacOS Mojave + iTerm2 / Alacritty), grazie
Adrian Magdas

31

Ho appena scoperto perché avevo molta confusione. Come altri qui, ho avuto difficoltà a rendere effettive le impostazioni del terminale predefinito. Mi sono ricordato che avevo una sessione di tmux in background. Ho ricollegato la mia sessione, chiuso i miei processi e chiuso TUTTI i processi tmux. La volta successiva che ho riavviato tmux, l'impostazione del terminale predefinito in ha .tmux.confiniziato a diventare effettiva. Non so se anche altri lo stiano facendo, ma consiglio di chiudere tutti i processi tmux prima di modificare il .tmux.conffile.

Ho fatto in modo che la mia configurazione funzionasse sul mio computer locale (OSX 10.9.5 con iTerm2) senza alcuna modifica a .bashrco .bash_profile. Tutto quello che ho fatto è stato aggiungere la linea set -g default-terminal "xterm-256color"per ~/.tmux.confe rimesso in moto tutti i processi tmux.

Ho avuto il mio setup remoto (ssh su Ubuntu 14.04) per funzionare esattamente allo stesso modo senza alcuna modifica a .bashrc. Ho semplicemente aggiunto set -g default-terminal "xterm-256color"alla ~/.tmux.confsulla mia macchina remota ed ho ricominciato tutti i processi tmux remoti.

Puoi testare ciò che Vim sta vedendo facendo echo $TERMall'interno di una sessione di tmux. Continuava a dire screencome valore fino a quando non ho riavviato tutti i processi tmux, a quel punto si è riflesso xterm-256colorcome previsto.

Spero che aiuti.


1
Ho confermato su molti altri sistemi operativi da questo post, la chiusura di tutti i processi e l'impostazione default-terminaldell'opzione .tmux.confha funzionato finora al 100% delle volte.
Chev,

2
anch'io! avrei speso meno tempo su questo se questa risposta fosse stata approfondita.
Sigfried

21

Quindi questo è un po 'stantio, ma potrebbe valere la pena ricordare che l'uso dello schermo spesso romperà i tasti Home e Fine. utilizzando

export TERM="xterm-256color"

in dovrebbe mantenere la funzionalità di questi e consentire alla combinazione di colori (o powerline) di funzionare correttamente.


Grazie per averlo segnalato. Non lo sapevo. Sembra ancora funzionare per Debian Derv da quello che ho visto finora. A mia difesa, il post era in riferimento a OSX.
Jpatrick,

tmux 1.9a, OSX 10.9.2, iTerm2 Build 1.0.0.20130622 export TERM = "xterm-256color" in .bash_profile, quindi impostalo su xterm-256-color ha funzionato per me. Non è necessario impostare alcuna configurazione di tmux.
agenteo,

14

Avevo bisogno di vim per visualizzare correttamente con tmux in terminal su Ubuntu e Cygwin / Mintty su Windows. L'ho fatto funzionare combinando le risposte in questo modo.

In .bashrc:

alias tmux="tmux -2"

In .vimrc:

" use 256 colors in terminal
if !has("gui_running")
    set t_Co=256
    set term=screen-256color
endif

" fix cursor display in cygwin
if has("win32unix")
    let &t_ti.="\e[1 q"
    let &t_SI.="\e[5 q"
    let &t_EI.="\e[1 q"
    let &t_te.="\e[0 q"
endif

basato sulle risposte di questa domanda, questa pagina wiki di Vim e questa domanda del cursore a blocchi


Ho avuto il problema con mintty e l'aggiunta della configurazione di VIM l'ha risolto per me. Non avevo nemmeno bisogno di fare l' tmuxalias.
trigoman

@trigoman, lo stesso anche per me, ho solo dovuto aggiornare il .vimrc.
Masood Alam,

Ho provato tutti i suggerimenti precedenti. Appena aggiunto set t_Co=256a .vimrc ed è stato risolto. Non avevo bisogno di creare un tmuxalias.
Mike,

11

Ho provato tutte le istruzioni sopra e ho scoperto che la cosa più importante è che devo aggiungere esplicitamente la seguente riga nel mio file .bashrc.

export TERM=screen-256color

Non so perché alias tmux = "TERM = screen-256color-bce tmux" non funziona. Uso Sierra 10.12.1.


Questo è ciò che ha funzionato per me. Semplicemente esportazione di TERM. +1
markovchain

10

Nel caso in cui qualcuno abbia bisogno del supporto del colore a 24 bit:

Tmux supporta il colore a 24 bit dalla versione 2.2. Se il terminale supporta il colore a 24 bit, aggiungere il terminale all'impostazione di sostituzione del terminale. Per esempio,

set -ga terminal-overrides ",xterm-256color:Tc"

Elenco di controllo del mio ambiente:

  • macOS Sierra 10.12.3
  • iTerm2 3.0.14 (Tipo di terminale report è xterm-256color)
  • neovim 0.1.7 (Abilita il colore a 24 bit aggiungendo: xterm-256colora .vimrc)
  • tmux 2.3 (Aggiungi set -ga terminal-overrides ",xterm-256color:Tc"a .tmux.conf)

Nient'altro che devo aggiungere .bashrco .zshrc.

Spero che questo possa aiutare.


l'unica cosa che ha funzionato per me. Cosa fa esattamente?
volk,

6

Dal momento che questo è il primo risultato su Google e dal momento che nessuno dei precedenti ha aiutato ... volevo postarlo in modo che qualcuno potesse trovarlo utile

in .vimrc:

set background=dark
set t_Co=256

HTH


Ho testato queste due linee e funzionano bene per il mio Vim su WSL-Windows10.
Llinfeng,

1
Molte grazie.
Funzionava

4

L'aggiunta della seguente riga in .tmux.conf ha funzionato per me con macOS Sierra 10.12.6,

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


Anch'io. Grazie @waffl per aver trovato questa soluzione!
Adam Erickson,

3

Se ti trovi nella mia stessa posizione, nessuno dei precedenti ha funzionato .. prova questo:

in .tmux.conf:

set -g default-terminal "xterm"

in bash config (forse .bashrco .bash_profile):

alias tmux="tmux -2"

e poi esegui:

killall tmux

e quindi rilanciare tmux


3

Se usi tmuxinatoro mux, dovrai aggiungerli in .bashrco .zshrc:

alias tmux='TERM=screen-256color tmux -2'
alias tmuxinator='TERM=screen-256color tmuxinator'
alias mux='TERM=screen-256color mux'

Queste forze per usare 256 colori nel terminale.

Quindi tmux, tmuxinatore il muxcomando funzionerà tutto.



2

Dovevo solo affrontare questo problema e, sebbene tutte le risposte precedentemente pubblicate fossero utili, nel mio caso non hanno risolto il problema.

Il mio problema è stato risolto rimuovendo la seguente riga nel mio .vimrc:

set termguicolors

che era comunque ridondante con un'altra istruzione.

Ora, con la seguente riga trovata nelle precedenti risposte nel mio .tmux.conf:

export TERM="screen-256color"

tutto è bello e colorato.


2

Ho rimosso la linea set termguicolors, ma non funziona. Impostazione set notermguicolorsinvece nelle .vimrcopere.


1

Dalla pagina man di tmux, aggiungendo flag come segue:

tmux -2

Questa -2bandiera impone a tmux di funzionare in modalità 256 colori.

Questo funziona per me


1

Non ho avuto molta fortuna nel provare a esportare un TERMterminale diverso o impostato nel mio .tmux.conf.

La mia soluzione per fissare i colori vim all'interno di tmux è stata l'aggiunta di questa linea a .tmux.conf:

set -g terminal-overrides 'xterm:colors=88'

Non sono sicuro del motivo per cui è stata necessaria questa sostituzione dato che io TERM=xterme me abbiamo impostato iTerm su xterm, ma sembra funzionare.


0

Sto usando Ubuntu bionic 18.04.4 LTS e tmux 2.6. Ho lo stesso problema e può essere risolto semplicemente aggiungendolo in .bashrc

export TERM=screen-256color

E ovviamente non dimenticare di cercarlo. source ~/.bashrc

O semplicemente riavvia il tuo teminale

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.