45 votes

Comportement étrange des couleurs vim à l'intérieur de l'écran avec 256 couleurs

J'ai essayé de faire de la coloration syntaxique (256 couleurs) de l' vim travail à l'intérieur d' screen, ce qui est en cours d'exécution à l'intérieur d' gterm.

Il fonctionne très bien dans le début. Ce que je veux dire par "au commencement" est, après je démarre screen, et entrez vim, les couleurs ont l'air très bien, et il y a vraiment de 256 couleurs.

Mais après un certain temps (je ne sais pas exactement combien de temps), les couleurs changent automatiquement en arrière à une apparition comme s'il y a seulement 8 (ou 16?) couleurs.

Par exemple, après que cela a déjà eu lieu si je entrer la commande

hi Comment ctermfg=68

à l'intérieur d' vim, les commentaires semblent être "pur" vert; cependant, si j'ouvre un autre vim en dehors de l'écran (dans le terminal), puis avec la même commande que les commentaires apparaissent à être un "jaunâtre" vert.

Ce qui suit est mon .screenrc paramètres liés à la couleur:

attrcolor b ".I"
defbce "on"
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
term xterm-256color

Après l'exécution d'un script python pour l'affichage de toutes les couleurs, je trouve que c'est peut-être un problème de l'écran lui-même, et n'a rien à voir avec vim.

Ce que j'ai fait est, à l'intérieur de l' screen session avec des problèmes, ce script donne 256 couleurs, mais beaucoup d'entre eux sont en fait les mêmes; cependant, lorsque je commence une nouvelle session écran avec la même configuration, ce script donne 256 couleurs qui sont distinctes les unes des autres.

Edit:

La nuit dernière je me suis connecté à mon ordinateur sous Linux (qui est dans mon bureau et il est toujours), avec des putty, puis a ouvert un screen session avec plusieurs fenêtres en elle. Les couleurs sont correctes, la nuit dernière. Alors avant que je suis allé dormir, je l'ai détaché l' screen session et fermés putty.

Maintenant, le matin, quand je l'attacher screen session putty encore une fois, les couleurs de collision: ils apparaissent comme si il y a seulement 8 couleurs.

Les couleurs sont très bien en dehors de screen (mais encore en putty).

Edit:

Trois ans plus tard, après que j'ai posé cette question, aujourd'hui j'ai vu un problème similaire. Le problème est qu' vim pouvez afficher 256 couleurs hors - screen, et screen pouvez afficher 256 couleurs avec un script de test, mais vim ne peut pas afficher n'importe quelle couleur (peut uniquement afficher en noir et blanc) à l'intérieur d' screen. Juste une remarque à moi-même, ici est l' .screenrc le fichier, je suis en utilisant

hardstatus alwayslastline "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %Y-%m-%d %c"
shell "bash"
startup_message off
vbell off
altscreen on
attrcolor b ".I"
defbce "on"
termcapinfo xterm* 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
term screen-256color

La solution à ce problème est déjà mentionné dans l'acceptation de réponse, à savoir, j'ai besoin d'inclure

export TERM=xterm-256color

en .bashrc.

87voto

Max Cantor Points 4486

Réponse Courte

Ensemble TERM de xterm-256color votre .bashrc, et de mettre term screen-256color votre .screenrc.

Réponse Longue

Voici pourquoi cela casse: gnome-terminal, écran, tmux, bash, le mastic et les vim ont tous été écrits à une gestion intelligente des 256 couleurs, mais vous avez besoin de mettre les choses en place correctement le plus rapidement possible. À l'aide de termcapinfo votre .screenrc est en fait un ruban à conduits solution!

Si votre TERM est réglé correctement, il sera le signal de bash que vous êtes en 256 couleurs mode, ce qui signifie qu'il va jouer gentil avec écran de 256 couleurs mode.

Donc, dans votre .bashrc, export TERM=xterm-256color. [1]

Dans votre .screenrc, utilisez screen-256color pour TERM au lieu de xterm-256color, et de supprimer le reste des trucs!

Dans votre Mastic de configuration, utilisez putty-256color.

Vous pouvez télécharger l'entrée termcap fichiers et les mettre dans ~/.terminfo/s et ~/.terminfo/p, si votre box ne dispose pas par défaut.


Notes de bas de page

[1] définition de la TERM de xterm-256color votre .bashrc peut être un peu présomptueux, surtout si vous utilisez le même .bashrc sur plusieurs machines. J'ai trouvé le bout de code suivant pour être assez efficace:

case "$TERM" in
*-256color)
    alias ssh='TERM=${TERM%-256color} ssh'
    ;;
*)
    POTENTIAL_TERM=${TERM}-256color
    POTENTIAL_TERMINFO=${TERM:0:1}/$POTENTIAL_TERM

    # better to check $(toe -a | awk '{print $1}') maybe?
    BOX_TERMINFO_DIR=/usr/share/terminfo
    [[ -f $BOX_TERMINFO_DIR/$POTENTIAL_TERMINFO ]] && \
        export TERM=$POTENTIAL_TERM

    HOME_TERMINFO_DIR=$HOME/.terminfo
    [[ -f $HOME_TERMINFO_DIR/$POTENTIAL_TERMINFO ]] && \
        export TERM=$POTENTIAL_TERM
    ;;
esac

L' alias de ssh est une mesure défensive pour nous empêcher de tenter d'ouvrir un 256 couleurs terminal sur un ordinateur distant qui n'est pas forcément le soutenir. Le bloc principal est l'autre moitié de l'équation; il vérifie pour voir si le correspondant terminfo entrée existe, et définit s'il n'.

16voto

Nick M Points 359

Max a une excellente réponse, mais j'ai eu à réinstaller écran avec ./configure --enable-colors256 pour faire en sorte que le config.h fichier a #define COLORS256 1 ensemble, ce qui n'a pas été le cas par défaut sur ma machine. Ensuite, j'ai constaté que les autres paramètres n'étaient pas nécessaires tant que je m'assurais que mon TERM était réglé sur xterm-256color .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X