J'essayais de faire en sorte que la coloration syntaxique (avec 256 couleurs) de vim
fonctionne dans screen
, qui s'exécute dans gterm
.
Cela fonctionne très bien au début. Ce que je veux dire par "au début" est, après avoir démarré screen
, et entré vim
, les couleurs semblent bien, et il y a vraiment 256 couleurs.
Mais après un certain temps (je ne sais pas exactement combien de temps) les couleurs reviennent automatiquement à une apparence comme s'il n'y avait que 8 (ou 16?) Couleurs.
Par exemple, après que cela s'est déjà produit, si j'entre la commande
hi Comment ctermfg=68
à l'intérieur de vim
, les commentaires apparaissent en vert "pur"; cependant, si j'ouvre un autre écran extérieur vim
(dans le même terminal), alors avec la même commande, les commentaires semblent être d'un vert "jaunâtre".
Voici mes paramètres .screenrc 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 avoir exécuté un script python pour afficher toutes les couleurs, je découvre que c'est peut-être un problème d'écran lui-même, et n'a rien à voir avec vim.
Ce que j'ai fait, c'est qu'à l'intérieur de la session screen
avec des problèmes, ce script donne 256 couleurs, mais beaucoup d'entre elles sont en fait les mêmes; cependant, lorsque je démarre une nouvelle session d'écran avec la même configuration, ce script donne 256 couleurs distinctes les unes des autres.
Éditer:
Hier soir, je me suis connecté à mon ordinateur Linux (qui est dans mon bureau et il est toujours allumé) avec PuTTY
, puis j'ai ouvert une session screen
avec plusieurs fenêtres. Les couleurs sont correctes hier soir. Avant de m'endormir, j'ai détaché la session screen
et fermé PuTTY
.
Maintenant, le matin, lorsque j'attache à nouveau cette session screen
dans PuTTY
, les couleurs se brisent: elles apparaissent comme s'il n'y avait que 8 couleurs.
Les couleurs sont bien en dehors de screen
(mais toujours dans PuTTY
).
Éditer:
Trois ans plus tard, après avoir posé cette question, j'ai vu aujourd'hui un problème similaire. Le problème est que vim
peut afficher 256 couleurs en dehors de screen
et screen
peut afficher 256 couleurs avec un script de test, mais vim
ne peut pas en afficher couleur (ne peut afficher que le noir et blanc) à l'intérieur de screen
. Juste pour me faire remarquer, voici le .screenrc
fichier que j'utilise
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 au problème est déjà mentionnée dans la réponse acceptée, à savoir, je dois inclure
export TERM=xterm-256color
dans .bashrc
.
Définissez TERM
sur xterm-256color
dans votre .bashrc
, et met term screen-256color
dans votre .screenrc
.
Voici pourquoi cela se casse: gnome-terminal, screen, tmux, bash, PuTTY et vim ont tous ont été écrits pour gérer intelligemment 256 couleurs, mais vous devez configurer les choses correctement le plus tôt possible. Utilisation de termcapinfo
dans votre .screenrc
est en fait une solution de ruban adhésif!
Si votre TERM
est correctement défini, il signalera à bash que vous êtes en mode 256 couleurs, ce qui signifie qu'il jouera bien avec l'écran étant également en mode 256 couleurs.
Donc, dans votre .bashrc
, export TERM=xterm-256color
. [1]
Dans votre .screenrc
, utilisation screen-256color
pour TERM
au lieu de xterm-256color
, et supprimez le reste de la cruauté!
Dans votre configuration PuTTY, utilisez PuTTY-256color
.
Vous pouvez télécharger les fichiers d'entrée termcap et les mettre dans ~/.terminfo/s
et ~/.terminfo/p
, si votre box n'en a pas par défaut.
notes de bas de page
[1] Définition de TERM
sur xterm-256color
dans votre .bashrc
peut être un peu présomptueux, surtout si vous utilisez le même .bashrc
sur plusieurs machines. J'ai trouvé l'extrait de code suivant 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
Le alias
de ssh est une mesure défensive pour nous empêcher d'essayer d'ouvrir un terminal 256 couleurs sur une machine distante qui ne le prend pas nécessairement en charge. Le bloc principal est l'autre moitié de l'équation; il vérifie si l'entrée terminfo correspondante existe et la définit si elle existe.
Max a une excellente réponse, mais j'ai dû réinstaller écran avec ./configure --enable-colors256
pour vous assurer que le config.h
le fichier avait #define COLORS256 1
set, ce qui n'était pas 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
.
Dans la dernière version de screen (v4.99.0), il n'est pas nécessaire d'utiliser term screen-256color
dans votre .screenrc
. Même sans ce paramètre, la couleur vim à l'intérieur et à l'extérieur de l'écran est exactement la même.
Remarque 1: J'ai testé cette fonctionnalité sur Mac OS High Sierra 10.13.4 et Ubuntu 16.04.
On peut obtenir la dernière version d'écran en utilisant git clone https://git.savannah.gnu.org/git/screen.git
.
Remarque 2: Contrairement à certaines des versions précédentes, alors que configuration cette version d'écran, il n'est pas nécessaire d'utiliser --enable-colors256
option
Remarque 3: Vous devez avoir le support PAM pour que cette configuration réussisse. Dans ubuntu, vous pouvez utiliser Sudo apt-get install libpam0g-dev
Remarque 4: Vous aurez besoin d'un accès Sudo
sur Ubuntu tout en faisant make install
car cette étape utilise chown
.