Prise en charge de 256 couleurs pour le fond vim dans tmux

98

Lors de l'utilisation de vim dans tmux, je peux voir que la prise en charge de 256 couleurs est activée. avec des couleurs $ tput

Cependant, changer la couleur dans vim en tmux changera la couleur par ligne, mais pas l’arrière-plan. voir capture d'écranentrez la description de l'image ici

Voici un extrait du fichier .vimrc, par exemple. Mon schéma de couleurs d'origine est darkisé puis, après exécution: Colourscheme molokai, vous voyez ce qui se passe.

Info

  • gnome-terminal
  • frapper

dans mon ~ / .tmux.conf

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

dans mon ~ / .vimrc

    set t_Co=256

dans mon ~ / .bashrc

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

dans mon ~ / .profile

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

Des idées pour obtenir un changement complet de couleurs dans vim? Est-ce que tous mes extraits des fichiers sont beaux?

winchendonsprings
la source
Que se passe-t-il si vous appuyez sur Ctrl-l en mode normal ou si vous exécutez la commande ": redraw"?
Heptite
@Heptite rien ne se passe toujours le changement de couleur est par ligne comme dans la capture d'écran
winchendonsprings

Réponses:

75

D'après l'apparence de vos fichiers .bashrc et .profile, les shells de tmux remplacent le paramètre "terminal par défaut" de votre conf. Tmux. Quelque chose comme ça:

  • tmux crée un nouveau shell avec TERM=screen-256color
  • .bashrc / .profile run, set TERM=xterm-256color
  • vim s'exécute, tente d'utiliser un TERM incorrect pour tmux

vous pouvez vérifier cela en exécutant

echo $TERM

dans une coquille tmux fraîche.

Tmux est relativement difficile à définir correctement. Si vous le pouvez, définissez la valeur du terme dans la configuration de gnome-terminal et non dans votre .bashrc. Sinon, entourez ces paramètres avec une vérification de TERM "screen" ou "screen-256color", et ne les réinitialisez pas dans ce cas.

Tmux veut VRAIMENT que le terminal soit réglé sur screenouscreen-256color

bloy
la source
5
Eh bien, vous l'avez corrigé. J'ai simplement commenté tout ce qui se trouvait dans mes fichiers .bashrc et .profile ayant trait à la définition de la couleur sur 256. Tmux et vim redémarrés fonctionnent avec le bon arrière-plan et 256 couleurs activées. Pouvez-vous me dire où se trouve le fichier de configuration gnome-terminal? Aussi, quand vous dites que tmux veut que le terminal soit réglé sur 'scfeen-256color, voulez-vous dire comme je l'ai dans mon tmux.conf? Merci
winchendonsprings
Je n'ai pas de machine à vérifier avec gnome-terminal, mais le paramètre devrait se situer quelque part dans l'interface graphique, probablement sous "paramètres du profil" ou quelque chose comme ça.
Bloy
5
Aussi, oui, laissez tmux faire sa propre chose aux coquilles qu’il engendre. Laissez la set -g default-terminal "screen-256color"ligne dans votre conf de tmux.
Bloy
2
Tout ce qui précède correspond à ce que je cherchais (en m'assurant que TERM est correctement défini et non remplacé dans tmux), et ALORS j'ai dû utiliser 'tmux -2' pour charger tmux.
Phantomwhale
Essayez if [[ $TERM == xterm ]]; then TERM=xterm-256color; fi, ça a fonctionné pour moi.
asymétrique
59

Comme expliqué ici , désactivez BCE ( Background Color Erase ) en désactivant l' t_utoption de terminal (exécutée :set t_ut=dans Vim, puis appuyez sur Control+ Lpour actualiser l'affichage du terminal) afin que les combinaisons de couleurs fonctionnent correctement lorsque Vim est utilisé dans les écrans tmux et GNU.

sunaku
la source
7
c'est la seule chose qui a finalement fonctionné pour moi!
Oz123
3
J'ai fini par ajouter set t_ut=à mon vimrc, ce qui évite d'avoir à utiliser manuellement la commande et il n'est pas nécessaire d'utiliser <kbd> Control </ kbd> + <kbd> L </ kbd> puisque la session commence avec BCE désactivé.
Erran
Ceci est essentiel lors de l'utilisation de PuTTY. Toutes les combinaisons de TERM sont insuffisantes lorsque la palette de couleurs a un fond. Excellent ajout au fil.
botimer
Cela fonctionne, cependant, lorsque cette solution est appliquée, le copier-coller à la souris permet également de copier et de coller les espaces derrière les lignes (si elles sont surlignées.)
Crin de cheval
17

J'ai trouvé un meilleur moyen sur ce post . Vous pouvez créer un alias de tmux tmux -2qui obligera tmux à supposer que le shell utilise un terminal 256 couleurs.

Boogy
la source
4

C'est ce qui a fonctionné pour moi dans # Ubuntu et # 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

Recharger les paramètres:

$ source ~ / .bashrc # Ubuntu

$ source ~ / .bash_profile # Mac

Configurer .bashrc pour Mac (tel qu'il est utilisé par tmux)

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

Configurez l’option "default-terminal" dans ~ / .tmux.conf.

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

Une solution rapide consiste à exécuter les opérations suivantes dans le terminal.

export TERM=xterm-color

Vous pouvez l'ajouter à votre ~/.bash_profileprofil ou à un autre profil pour qu'il soit toujours défini au début.

Peter Dietz
la source
Merci! C’est tout ce que j’avais besoin d’ajouter à mon ordinateur .zshrcpour que le mode visuel soit réellement visible.
danmcardle
1

J'ai eu un problème très similaire pour gnome-terminal + tmux + vim mais il a été étendu également à un problème de combinaison de touches spécifique:. Je devais combiner quelques choses ensemble. Tout d'abord, je devais configurer mon fichier .tmux.conf dans:

# 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

Puis dans .vimrc:

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

Et cela a fait le travail pour les clés et le fond.

P4C
la source
1

Si vous rencontrez toujours des problèmes: j’ai remarqué que vim retombe dans l’utilisation de l’option t_Co=8dans tmux, même si elle $TERMest définie sur screen-256color. Ma solution de contournement est cet extrait de vimrc:

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

La $TMUXvariable n'est remplie que si elle se trouve dans une session tmux. Dans ce cas, j'autorise vim à utiliser 256 couleurs. Notez que je désactive également les termes terminologiques, car tmux ne prend pas en charge les couleurs vraies.

lgalke
la source
0

Juste maintenant fait face au même problème. Sur la base de la réponse de bloy et du contenu actuel de mon fichier ~ / .profile (en réalité, il s’agit du même que celui de winchendonsprings ), j’ai résolu mon problème de la manière suivante:

~/.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 logique est simple: si nous ne sommes pas dans la session tmux, utilisez xterm (coloré ou non). Sinon la même chose pour l'écran.

C'est peut-être trop verbeux, mais vous avez eu l'idée.

méchant
la source