perdre vim colorscheme en mode tmux

228

J'utilise iterm2 et lorsque je suis en mode tmux, le schéma de couleurs que j'ai défini dans vim ne s'affiche pas. Seul le schéma de couleurs que j'ai défini dans iterm. Si je lance vim à partir du shell, le schéma de couleurs semble correct - ce n'est que lorsque je suis en mode tmux.

J'ai essayé de définir :colorscheme molokaiquand dans vim (voir capture d'écran ci-dessous) et cela ne change pas - encore une fois, le schéma de couleurs par défaut pour iterm2 reste.

Suis-je en train de manquer un paramètre pour iterm ou tmux.conf? Mes dotfles sont sur github ici.

tristen
la source
31
Que se passe-t-il lorsque vous le faites $ tmux -2?
romainl
4
C'était tout à fait ça. Quel est le drapeau -2?
tristen
11
Il force tmux à fonctionner avec 256 couleurs.
romainl

Réponses:

252

J'ai eu le même problème. La seule différence était que j'utilisais solarizeplutôt molokai.

Pour résoudre le problème, j'ai configuré un alias dans ~/.bashrc:

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

Et configurez l' default-terminaloption dans ~/.tmux.conf:

set -g default-terminal "xterm"

Enfin, faites $ source ~/.bashrcpour charger un nouvel alias.

Seyeong Jeong
la source
20
J'utilise ceci au lieu de tmux -2car c'est plus verbeux.
thameera
97
Personnellement, je devais utiliser set -g default-terminal "screen-256color"pour travailler plutôt que xtermsur OS X, intégré dans une boîte Ubuntu. J'ai fait référence à ce site: rhnh.net/2011/08/08/vim-and-tmux-on-osx
waffl
7
L'alias ici n'a pas de sens: il prétend à tmux qu'il s'exécute à l'intérieur de l'écran ou de tmux, ce qui n'est presque jamais le cas. Pour dire à tmux de supposer que le terminal sur lequel il fonctionne prend en charge 256 couleurs, exécutez tmux -2ou tmux -2 attach(tmux décide chaque fois que vous attachez une session nouvelle ou existante à un terminal). Un alias sensé serait alias tmux='tmux -2'. Voir aussi la prise en charge de tmux, TERM et 256 couleurs
Gilles 'SO- arrête d'être méchant'
3
J'ai lu dans une autre réponse (impossible de trouver la référence) que ce n'était pas une bonne pratique de forcer le TERM, bien que je ne sois pas sûr. Depuis l' tmux -2option avec le set -g default-terminal "screen-256color"travaillé pour moi, ce sera mon choix. Mais merci quand même!
marcelocra
5
Si le .tmux.confparamètre ne semble pas prendre effet, fermez tous les processus tmux et redémarrez. Vous pouvez simplement le faire set -g default-terminal "screen-256color"sans définir d'alias .bashrc. Je pense que les gens font des solutions de contournement comme l'alias de variable d'environnement parce qu'ils ne ferment pas tous les processus tmux après la configuration .tmux.conf.
Chev
74

Comme @romainl le mentionne ci-dessus, j'ai dû forcer tmux à utiliser 256 couleurs en ajoutant le -2drapeau:

$ tmux -2

J'ai ajouté alias tmux='tmux -2'à mon bash_profile, donc, je n'oublie pas :)

tristen
la source
En fait, ce n'est pas obligatoire du tout: je ne l'utilise pas -2mais j'ai 256 couleurs fonctionnant dans Vim dans tmux.
romainl
@romainl C'est nécessaire si tmux ne détecte pas votre terminal comme ayant 256 couleurs, ce qui est assez courant.
Gilles 'SO- arrête d'être méchant'
1
@Gilles, Vim ne détecte pas que le terminal prend en charge 256 couleurs car la valeur par défaut de tmux TERMest screen. -2ne change pas TERMet ne change rien à la couleur des informations que Vim obtient de son environnement: :echo &t_Coretourne toujours 8. Avec les informations qui lui sont données, Vim fait ce qu'il faut. Les seules choses qui doivent être définies sont 1. votre émulateur de terminal TERMà xterm-256colorou une valeur équivalente comme urxvt-unicode-256coloret 2. la valeur TERMpar défaut de tmux avec set -g default-terminal "screen-256color".
romainl
@romainl La plupart des environnements ont TERMdéfini xterm, non xterm-256color, d'où la nécessité de s'exécuter tmux -2(ou TERM=xterm-256color tmux, ou de changer le termcap ou d'autres façons d'accomplir la même chose).
Gilles 'SO- arrête d'être méchant'
1
@Gilles, le problème est que -2 n'accomplit rien qui ait un impact sur le comportement de Vim concernant la prise en charge de 256 couleurs, car la seule chose qui compte pour Vim est votre TERM et cela doit être défini à votre extrémité de la chaîne: dans votre émulateur de terminal. Si vous SSH via 5 hôtes et que votre terminal est correctement configuré, Vim lancé sur le 5ème hôte verra votre TERM 256 couleurs et agira en conséquence. Si vous utilisez tmux à n'importe quel point de la chaîne, -2 n'aura aucun impact sur le comportement de Vim car tout ce qu'il voit est que son environnement est limité à 8 couleurs en raison du TERM par défaut de tmux: écran, -2 ou non.
romainl
72

J'ai essayé toutes les solutions ci-dessus et ce qui a finalement fonctionné pour moi, c'est de mettre les lignes suivantes .tmux.conf:

set -g default-terminal "xterm-256color"
ElefEnt
la source
J'utilise tmux via SSH et c'est aussi ce qui a fonctionné pour moi même si je n'utilise pas xterm, juste SSH normal.
armen.shimoon
Je ne l'utilisais pas sur ssh et c'était la seule réponse qui fonctionnait pour moi. Session iTerm locale dans OSX 10.9.5.
Chev
Cela fonctionne pour moi (MacOS Mojave + iTerm2 / Alacritty), merci
Adrian Magdas
31

Je viens de découvrir pourquoi j'avais beaucoup de confusion. Comme d'autres ici, j'avais du mal à faire en sorte que le paramètre de terminal par défaut prenne effet. Je me suis souvenu que j'avais une session tmux en arrière-plan. J'ai réattaché ma session, fermé mes processus et fermé TOUS les processus tmux. La prochaine fois que j'ai redémarré tmux, le paramètre de terminal par défaut a .tmux.confcommencé à prendre effet. Je ne sais pas si d'autres le font aussi mais je recommande de fermer tous les processus tmux avant de modifier le .tmux.conffichier.

J'ai fait fonctionner ma configuration sur ma machine locale (OSX 10.9.5 avec iTerm2) sans aucune modification de .bashrcou .bash_profile. Tout ce que j'ai fait, c'est d'ajouter la ligne set -g default-terminal "xterm-256color"à~/.tmux.conf et remis en marche tous les processus tmux.

J'ai obtenu que ma configuration à distance (ssh vers Ubuntu 14.04) fonctionne exactement de la même manière sans aucune modification .bashrc. J'ai simplement ajouté set -g default-terminal "xterm-256color"à ~/.tmux.confsur ma machine distante et redémarré tous les processus tmux distants.

Vous pouvez tester ce que Vim voit en faisant echo $TERMdepuis une session tmux. Il a continué à dire screencomme valeur jusqu'à ce que je redémarre tous les processus tmux, auquel cas il se reflétait xterm-256colorcomme prévu.

J'espère que cela pourra aider.

Chev
la source
1
J'ai confirmé sur plusieurs autres systèmes d'exploitation depuis ce post, la fermeture de tous les processus et la définition de l' default-terminaloption dans .tmux.confa fonctionné 100% du temps jusqu'à présent.
Chev
2
moi aussi! j'aurais passé moins de temps là-dessus si cette réponse avait été plus loin.
Sigfried
21

Donc, c'est un peu vicié, mais il vaut peut-être la peine de mentionner que l'utilisation de l'écran casse souvent les touches Début et Fin. En utilisant

export TERM="xterm-256color"

in devrait conserver la fonctionnalité de ces derniers et permettre au jeu de couleurs (ou powerline) de fonctionner correctement.

Jpatrick
la source
Merci de l'avoir signalé. Je ne le savais pas. Cela semble toujours fonctionner pour Debian derv d'après ce que j'ai vu jusqu'à présent. Pour ma défense, le poste faisait référence à OSX.
Jpatrick
tmux 1.9a, OSX 10.9.2, iTerm2 Build 1.0.0.20130622 export TERM = "xterm-256color" dans .bash_profile, puis définissez iterm sur xterm-256-color a fonctionné pour moi. Pas besoin de définir de configuration tmux.
agenteo
14

J'avais besoin que vim s'affiche correctement avec tmux dans le terminal sur ubuntu et cygwin / mintty sur windows. Je l'ai fait fonctionner en combinant les réponses comme celle-ci.

Dans .bashrc:

alias tmux="tmux -2"

En .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

basé sur les réponses à cette question, cette page wiki Vim et cette question de curseur de bloc

Andrew Johnston
la source
J'ai eu le problème avec mintty, et l'ajout de la configuration vim l'a résolu pour moi. Je n'avais même pas besoin de faire l' tmuxalias.
trigoman
@trigoman, même pour moi aussi, je viens de mettre à jour le .vimrc.
Masood Alam
J'ai essayé toutes les suggestions précédentes. Juste ajouté set t_Co=256à .vimrc et il a été corrigé. Je n'avais pas besoin de créer d' tmuxalias.
Mike
11

J'ai essayé toutes les instructions ci-dessus, et j'ai découvert que la chose la plus importante est que je dois ajouter explicitement la ligne suivante dans mon fichier .bashrc.

export TERM=screen-256color

Je ne sais pas pourquoi l'alias tmux = "TERM = screen-256color-bce tmux" ne fonctionne pas. J'utilise Sierra 10.12.1.

Lion Lai
la source
C'est ce qui a fonctionné pour moi. Exportation simple de TERM. +1
markovchain
10

Si quelqu'un a besoin d'une prise en charge des couleurs 24 bits:

Tmux prend en charge la couleur 24 bits à partir de la version 2.2. Si votre terminal prend en charge la couleur 24 bits, ajoutez votre terminal au paramètre de remplacement de terminal. Par exemple,

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

Liste de contrôle de mon environnement:

  • macOS Sierra 10.12.3
  • iTerm2 3.0.14 (le type de terminal de rapport est xterm-256color)
  • neovim 0.1.7 (Activer la couleur 24 bits en ajoutant: xterm-256colorà.vimrc )
  • tmux 2.3 (Ajouter set -ga terminal-overrides ",xterm-256color:Tc"à .tmux.conf)

Rien d'autre que je dois ajouter .bashrcou .zshrc.

J'espère que cela pourrait vous aider.

Yanzhe Chen
la source
seule chose qui a fonctionné pour moi. qu'est-ce que cela fait exactement?
volk
6

Étant donné qu'il s'agit du premier résultat sur Google et qu'aucune des réponses ci-dessus n'a aidé ... je voulais publier ceci afin que quelqu'un puisse le trouver utile

dans .vimrc:

set background=dark
set t_Co=256

HTH

HK_
la source
J'ai testé ces deux lignes, et elles fonctionnent bien pour mon Vim sur WSL-Windows10.
llinfeng
1
Merci beaucoup. Cela a fonctionné sur Ubuntu 18 avec gnome-terminal
Roymunson
4

L'ajout de la ligne suivante dans .tmux.conf a fonctionné pour moi avec macOS Sierra 10.12.6,

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

Zack Zhu
la source
Pareil ici. Merci @waffl d'avoir trouvé cette solution!
Adam Erickson
3

Si vous vous trouvez dans la même situation que moi, que rien de ce qui précède n'a fonctionné .. essayez ceci:

dans .tmux.conf:

set -g default-terminal "xterm"

dans la configuration bash (peut .bashrc- être ou .bash_profile):

alias tmux="tmux -2"

puis exécutez:

killall tmux

puis relancez tmux

eliasbagley
la source
3

Si vous utilisez tmuxinatorou mux, vous devrez les ajouter dans .bashrcou .zshrc:

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

Ces forces d'utiliser 256 couleurs dans le terminal.

Ensuite tmux, tmuxinatoret la muxcommande fonctionnera tous.

qingxp9
la source
2

Afin de configurer la couleur correcte et de se débarrasser des problèmes de rendu dans Ubuntu et Mac:

vérifie ça

Munish
la source
2

Je devais juste faire face à ce problème, et bien que toutes les réponses précédemment publiées aient été utiles, elles n'ont pas résolu le problème dans mon cas.

Mon problème a été résolu en supprimant la ligne suivante dans mon .vimrc:

set termguicolors

qui était de toute façon redondante avec une autre instruction.

Maintenant, avec la ligne suivante trouvée dans les réponses précédentes dans mon .tmux.conf:

export TERM="screen-256color"

tout est beau et coloré.

Nitlev
la source
2

J'ai supprimé la ligne set termguicolors, mais cela ne fonctionne pas. Mise en set notermguicolorsplace à la place .vimrc.

alextanhongpin
la source
1

Depuis la page de manuel tmux, ajoutez un indicateur comme suit:

tmux -2

Ce -2drapeau force tmux à fonctionner en mode 256 couleurs.

Ça marche pour moi

RyanLiu
la source
1

Je n'ai pas eu beaucoup de chance en essayant d'exporter un TERMterminal par défaut différent ou défini dans mon .tmux.conf.

Ma solution pour fixer les couleurs vim dans tmux a été d'ajouter cette ligne à .tmux.conf:

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

Je ne sais pas pourquoi ce remplacement était nécessaire étant donné que mon TERM=xtermet moi avons également réglé iTerm sur xterm, mais cela semble fonctionner.

Patrick Lewis
la source
0

J'utilise Ubuntu bionic 18.04.4 LTS et tmux 2.6. J'ai le même problème et il peut être résolu en ajoutant simplement ceci dans .bashrc

export TERM=screen-256color

Et bien sûr, n'oubliez pas de vous l'approvisionner. source ~/.bashrc

Ou redémarrez simplement votre teminal

babang-parhusip
la source