Supporto a 256 colori per lo sfondo vim in tmux


98

mentre utilizzo vim in tmux, vedo che il supporto 256 colori è abilitato. con $ tput colori

Tuttavia, cambiando il colorcheme in vim mentre in tmux cambierà il colorcheme in base alla riga ma non all'intero sfondo. vedi screenshotinserisci qui la descrizione dell'immagine

Ecco uno snippet del mio file .vimrc per esempio. Il mio originale colorscheme è dark solarized e poi dopo aver funzionato: colorscheme molokai vedi cosa succede.

Informazioni

  • gnome-terminal
  • bash

nel mio ~ / .tmux.conf

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

nel mio ~ / .vimrc

    set t_Co=256

nel mio ~ / .bashrc

# ryan
export TERM="xterm-256color"
# ryan
alias tmux="tmux -2"

nel mio ~ / .profile

# ryan 256 color support
if [ -e /usr/share/terminfo/x/xterm-256color ]; then
    export TERM='xterm-256color'
  else
    export TERM='xterm-color'
  fi

Qualche idea su come posso ottenere un cambio di colore completo in vim? Tutti i miei frammenti dei file stanno bene?


Cosa succede se si preme control-l in modalità normale o si esegue il comando ": redraw"?
Eptita

@Heptite non succede nulla, tuttavia il cambio di colore è per riga come nello screenshot
winchendonsprings

Risposte:


75

Dall'aspetto del tuo .bashrc e .profile, le shell all'interno di tmux stanno sovrascrivendo l'impostazione 'default-terminal' nella tua tmux conf. Qualcosa come questo:

  • tmux crea una nuova shell con TERM=screen-256color
  • .bashrc / .profile run, set TERM=xterm-256color
  • vim viene eseguito, tenta di utilizzare TERM non corretto per tmux

puoi verificarlo eseguendo

echo $TERM

in una fresca conchiglia tmux.

Tmux è relativamente esigente di avere un terminale impostato correttamente. Se puoi, imposta il valore del termine nella configurazione di gnome-terminal, non nel tuo .bashrc. In caso contrario, circondare quelle impostazioni con un controllo per "schermo" o "schermo-256colore" TERM, e in quel caso non ripristinarle.

Tmux vuole davvero che il terminale sia impostato su screenoscreen-256color


5
Bene, l'hai risolto. Ho semplicemente commentato qualsiasi cosa nel mio .bashrc e nei miei file .profile che avevano a che fare con l'impostazione del colore su 256. Riavviato tmux e vim funziona con lo sfondo corretto e 256 colori abilitati. Puoi dirmi dove si trova il file di configurazione di gnome-terminal? Anche quando dici che tmux vuole che il terminale sia impostato su 'scfeen-256color, intendi come se lo avessi nel mio tmux.conf? Grazie
winchendonsprings

Non ho una macchina con gnome-terminal su di esso utile da controllare, ma l'impostazione dovrebbe essere da qualche parte nella GUI, probabilmente sotto "Impostazioni profilo" o qualcosa del genere.
sanguinante

5
Inoltre, sì, lascia che tmux faccia la propria cosa con le conchiglie che genera. Lascia la set -g default-terminal "screen-256color"riga nel tuo tmux conf.
Bloy

2
Tutto quanto sopra è quello che stavo cercando (assicurandomi che TERM sia impostato correttamente e non sovrascritto in tmux), E POI ho dovuto usare 'tmux -2' per caricare tmux.
phantomwhale,

Prova if [[ $TERM == xterm ]]; then TERM=xterm-256color; fi, ha funzionato per me.
asimmetrico

59

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.


7
questa è l'unica cosa che finalmente ha funzionato per me!
Oz123,

3
Ho finito per aggiungere set t_ut=al mio vimrc che elimina la necessità di utilizzare manualmente il comando e non è necessario utilizzare <kbd> Control </kbd> + <kbd> L </kbd> poiché la sessione inizia con BCE disabilitato.
erran,

Questo è essenziale quando si utilizza PuTTY. Tutte le combinazioni TERM non sono all'altezza quando lo schema dei colori ha uno sfondo. Grande aggiunta alla discussione.
botimer,

Funziona, tuttavia, quando viene applicata questa soluzione, copiare e incollare con il mouse copia e incolla anche gli spazi delle linee finali (se evidenziate).
crine di cavallo

17

Ho trovato un modo migliore su questo post . È possibile creare un alias di tmux per tmux -2forzare tmux ad assumere che la shell stia utilizzando un terminale a 256 colori.


4

Questo è ciò che ha funzionato per me in #Ubuntu e #Mac:

# File: ~/.bashrc (Ubuntu), ~/.bash_profile (Mac)
# for VIM and TMUC
if [ "$TERM" = "xterm" ]; then
  export TERM=xterm-256color
fi
alias tmux='tmux -2'  # for 256color
alias tmux='tmux -u'  # to get rid of unicode rendering problem

Ricarica impostazioni:

$ source ~ / .bashrc # Ubuntu

$ source ~ / .bash_profile # Mac

Configurare .bashrc per Mac (in quanto utilizzato da tmux)

# File: ~/.bashrc (Mac)
source ~/.bash_profile

Impostare l'opzione "default-terminal" in ~ / .tmux.conf.

# File: ~/.tmux.conf
set -g default-terminal "screen-256color"  # Mac and Ubuntu

1

Una soluzione rapida è eseguire quanto segue nel terminale.

export TERM=xterm-color

Puoi aggiungerlo al tuo ~/.bash_profileo ad altri profili per essere sempre impostato all'avvio.


Grazie! Questo era tutto ciò che dovevo aggiungere al mio .zshrcper rendere la modalità visiva realmente visibile.
danmcardle,

1

Ho avuto un problema molto simile per gnome-terminal + tmux + vim ma è stato esteso anche al problema specifico della combinazione di tasti:. Ho dovuto combinare alcune cose insieme. prima di tutto ho dovuto impostare il mio .tmux.conf in:

# Ensure terminal starts with its own colour scheme (helps Vim/Neovim themes to not break)
set -g default-terminal "xterm-256color"
# set -g default-terminal "screen-256color" # no S-Fx keys ;-(
# and ensure the key-codes are xterm alike
set -g xterm-keys on

Quindi in .vimrc:

if $COLORTERM == 'gnome-terminal'
      set t_Co=256
endif
set t_ut=

E quello ha fatto il lavoro per i tasti e lo sfondo.


1

Se i problemi persistono: ho notato che vim ricorre all'uso dell'opzione t_Co=8all'interno di tmux anche se $TERMè impostato su screen-256color. La mia soluzione alternativa è questo frammento in vimrc:

if exists("$TMUX")
        set t_Co=256
        set notermguicolors
else
        set termguicolors
endif

La $TMUXvariabile viene riempita solo se all'interno di una sessione di tmux. In questo caso, consento a vim di utilizzare 256 colori. Nota che ho anche disinserito i term guicolor poiché tmux non supporta i colori reali.


0

Proprio ora ha affrontato lo stesso problema. Sulla base della risposta di bloy e del contenuto attuale del mio ~ / .profile (in realtà è lo stesso di winchendonsprings ') ho risolto il mio problema come segue:

~/.profile:

if [[ -z $TMUX ]]; then
    if [ -e /usr/share/terminfo/x/xterm+256color ]; then # may be xterm-256 depending on your distro
        export TERM='xterm-256color'
    else
        export TERM='xterm'
    fi
else
    if [ -e /usr/share/terminfo/s/screen-256color ]; then
        export TERM='screen-256color'
    else
        export TERM='screen'
    fi
fi

La logica è semplice: se non siamo all'interno della sessione di tmux, usa xterm (colorato o no). Altrimenti la stessa cosa per lo schermo.

Forse è troppo prolisso, ma hai avuto l'idea.

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.