web-dev-qa-db-fra.com

Pourquoi les couleurs Vim sont-elles différentes à l'intérieur et à l'extérieur de tmux?

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, 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:

enter image description here

Ma variable TERM est

  • En dehors de tmux: xterm-256color
  • À l'intérieur de tmux: screen-256color

Vim signale ces types de terminaux comme prévu (via :set term?):

  • En dehors de tmux: 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?):

  • En dehors de tmux: t_Co=256
  • À l'intérieur de tmux: t_Co=256

Il existe de nombreuses questions similaires concernant l'exécution 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

Cela me fait donc croire qu'il y a simplement une différence entre le xterm-256color et screen-256color les capacités du terminal qui provoquent la différence de couleur. Ce qui conduit à la question posée dans le titre: qu'est-ce qui, spécifiquement dans les capacités du terminal, fait que les couleurs Vim sont différentes? Je vois les différences entre l'exécution de :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 d'avoir des couleurs Vim 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éfinition explicite du terminal par défaut utilisé par tmux dans ~/.tmux.conf à différentes valeurs (certaines contre l'avis du tmux FAQ ):
 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émarrage de tmux à l'aide de tmux -2.

Dans tous les cas, Vim a continué d'afficher différentes couleurs à l'intérieur de tmux.

36

tmux ne prend pas en charge la fonction terminfo bce (effacement de la couleur arrière), qui vim vérifie, pour décider d'utiliser ou non son schéma de "couleurs par défaut".

Cette caractéristique de tmux a été mentionnée à plusieurs reprises -

18
Thomas Dickey

J'ai eu le même problème avant. Les commentaires en bleu dans Vim étaient difficiles à lire. Dans .tmux.conf J'ai défini ceci:

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

Et en .vimrc:

set background=dark

Maintenant, il ressemble à ceci et fonctionne à la fois dans Gnome Terminal et Cygwin: enter image description here

21
Vitalii Plagov

Grâce à l'analyse par @ egmont des couleurs que Vim produisait lorsque TERM=screen-256color, J'ai été inspiré par le schéma de couleurs utilisé par Vim dans les deux scénarios.

Vim indique qu'il utilise le schéma de couleurs default dans les deux cas. Je trouvais cela étrange parce que le schéma de couleurs default sur Fedora 25 (/usr/share/vim/vim80/colors/default.vim) ne semble pas correspondre aux couleurs que je vois lorsque TERM=xterm-256color. Si je définis explicitement le schéma de couleurs à l'aide de :colorscheme default quand TERM=xterm-256color, L'apparence de Vim change à celle lorsque TERM=screen-256color. Pour que les couleurs reviennent à ce qu'elles étaient lorsque j'ai démarré Vim, j'ai dû utiliser le jeu de couleurs ron. Le progrès!

J'ai trouvé un Ask Ubuntu réponse qui suggère que lorsque Vim signale qu'il utilise le jeu de couleurs default, cela ne signifie pas nécessairement default.vim mais plutôt un schéma de couleurs spécifique au thème. Comme le souligne la réponse, un thème sombre (que j'utilise) correspond au schéma de couleurs ron, comme je l'ai découvert ci-dessus. (Même si ce message concerne Ubuntu, je suppose que l'OP utilisait GNOME.)

J'ai également trouvé un autre question qui semble décrire le même problème que j'ai. Je l'ai rencontré lors d'une recherche avant de poster cette question, mais, pour une raison quelconque, le schéma de couleurs ne m'a pas semblé pertinent.

J'ai fini par faire ce que @LapshinDmitry a fait dans sa réponse et j'ai explicitement défini colorscheme ron dans mon ~/.vimrc fichier. Maintenant, que je démarre Vim à l'intérieur ou à l'extérieur de tmux, les couleurs apparaissent les mêmes. Le seul inconvénient est que si je change jamais mon thème de bureau d'une saveur sombre à une saveur claire, Vim ne passera pas automatiquement au jeu de couleurs de thème clair "par défaut", qui est apparemment peachpuff. Je peux vivre avec ça, car je ne changerai probablement jamais mon thème.

Je ne vais pas accepter cette réponse, car je pense à définir explicitement le jeu de couleurs dans mon ~/.vimrc une solution de contournement plutôt que la solution. Si quelqu'un peut expliquer pourquoi Vim charge un jeu de couleurs "par défaut" différent en fonction de la valeur de TERM, je serai heureux d'accepter cette réponse, car je suis plus intéressé à comprendre la cause racine. Je soupçonne que cela a quelque chose à voir avec la façon dont Vim interprète les capacités du terminal entre les deux fichiers terminfo.

2

Ma variable TERM est Outside tmux: xterm-256color Inside tmux: screen-256color

C'est correct et ça marche pour moi. Essayez-le avec un autre terminal (j'utilise urxvt) pour voir si Gnome Terminal est le problème. La

Vérifiez également COLORTERM (le mien est défini sur rxvt) et unset TERMCAP.

0
laktak

Pour ma propre référence plus tard, lorsque je goûterai sans aucun doute à Google pour configurer ma prochaine machine.

  • Vim8/Neovim
  • Windows 10
  • Git bash
  • Tmux 2.7

Utilisez ces instructions pour obtenir les fichiers binaires et les DLL nécessaires dans le CHEMIN de Git bash:

https://blog.pjsen.eu/?p=44

Utilisez ces commandes pour configurer:

echo 'set -g default-terminal "screen.xterm-256color"' > ~/.tmux.conf
tmux -2u
0
Josh Peak