Environnement:
- Fedora 25 (4.9.12-200.fc25.x86_64)
- Terminal GNOME 3.22.1 utilisant la version 0.46.1 + GNUTLS de VTE
- VIM - Vi IMproved 8.0 (12 septembre 2016, compilé le 22 février 2017 16:26:11)
- tmux 2.2
J'ai récemment commencé à utiliser tmux et j'ai observé que les couleurs dans Vim changent selon que je cours à l'intérieur ou à l'extérieur de tmux. Ci-dessous sont des captures d'écran de Vim à l'extérieur (à gauche) et à l'intérieur (à droite) de tmux lors de la visualisation d'un diff Git:
Ma TERM
variable est
- Tmux extérieur:
xterm-256color
- À l'intérieur de tmux:
screen-256color
Vim rapporte ces types de terminaux comme prévu (via :set term?
):
- Tmux extérieur:
term=xterm-256color
- À l'intérieur de tmux:
term=screen-256color
Vim signale également que les deux instances s'exécutent en mode 256 couleurs (via :set t_Co?
):
- Tmux extérieur:
t_Co=256
- À l'intérieur de tmux:
t_Co=256
Il existe de nombreuses questions similaires concernant le fonctionnement de Vim en mode 256 couleurs dans tmux (la meilleure réponse que j'ai trouvée est ici ), mais je ne pense pas que ce soit mon problème compte tenu des informations ci-dessus.
Je peux dupliquer le problème en dehors de tmux si j'exécute Vim avec le type de terminal défini sur screen-256color
:
$ TERM=screen-256color vim
Alors , qui me fait croire qu'il ya simplement une certaine différence entre les xterm-256color
et screen-256color
capacités du terminal qui provoque la différence de couleur. Ce qui conduit à la question posée dans le titre: qu'est - ce qui, dans les capacités du terminal, fait que les couleurs Vim sont différentes? Je vois les différences entre courir :set termcap
à l' intérieur et à l'extérieur de tmux, mais je suis curieux de savoir quelles variables provoquent réellement la différence de comportement.
Indépendamment de la question précédente, est-il possible que les couleurs Vim soient cohérentes lors de l'exécution à l'intérieur ou à l'extérieur de tmux? Certaines choses que j'ai essayées incluent:
- Définir explicitement le terminal par défaut utilisé par tmux dans
~/.tmux.conf
différentes valeurs (certaines contre l'avis de la FAQ tmux ):
set -g default-terminal "screen-256color" set -g default-terminal "xterm-256color" set -g default-terminal "screen.xterm-256color" set -g default-terminal "tmux-256color"
- Démarrer tmux avec
tmux -2
.
Dans tous les cas, Vim a continué d'afficher différentes couleurs à l'intérieur de tmux.
xterm-256color
version (recherchez "38; 5;" dans le fichier), mais je ne peux pas dans le screen-256color
. Par exemple , là où il y a \e[38;5;81m
dans xterm-256color
(couleur n ° 81 sur la palette 256 couleurs, une nuance bleue du milieu), screen-256color
contient à la \e[34m
place (le bleu standard de la palette 8 couleurs). La question principale est donc pourquoi Vim n'utilise pas la palette de 256 couleurs en cas de TERM=screen-256color
.
xterm-256color
version semble imprimer l'écran deux fois, d'abord avec les couleurs héritées puis avec la palette de 256 couleurs. Recherchez par exemple "F1" dans le fichier, vous trouverez deux correspondances dans xterm-256color
, la première avec la \e[34m
couleur, la seconde avec \e[38;5;81m
. Je ne sais pas ce qui se passe ici.
set -g default-terminal "screen.xterm-256color"
dans ~/.tmux.conf
et recharger la config dans tmux (<Cs>: source fichier ~ / .tmux.conf) a fonctionné pour moi (question fort). thx
script
, démarrervim
, quittervim
puis quitterscript
le shell et joindre letypescript
fichier résultant ? Répétez ensuite les mêmes étapes avec à laTERM=screen-256color vim
place.