Comment activer le support couleur dans Vim?

98

J'ai un beau schéma de couleurs Vim ( xoria256 ) qui a l'air brillant dans GVim, mais lorsque j'utilise Normal vimdans Terminal, le schéma de couleurs n'est que partiellement pris en charge. Par exemple, la couleur d'arrière-plan aubergine semi-transparente par défaut est utilisée. Comment faire en sorte que Terminal rende fidèlement mon schéma de couleurs Vim?

David Siegel
la source
4
Même la palette de couleurs par défaut est meilleure avec 256 couleurs. S'il n'y avait pas eu votre question, je ne l'aurais jamais trouvée. Cela devrait être la valeur par défaut.
Mihai Capotă

Réponses:

79

Le terminal GNOME prend en charge 256 couleurs, mais n'annonce pas son soutien. Vous pouvez remplacer la détection automatique de vim en mettant ce qui suit:

if $COLORTERM == 'gnome-terminal'
  set t_Co=256
endif

dans votre ~ / .vimrc.

Remarque : si vous utilisez l’écran GNU, il se fera un plaisir de manger ces codes de 256 couleurs et de les convertir en 16 couleurs de base. Une meilleure solution consiste à remplacer TERM par xterm-256color avant de lancer screen / vim.

Mise à jour pour 2017 : si vous avez un Vim suffisamment récent (7.4.1799 ou plus récent) et un émulateur de terminal suffisamment avancé (xterm ou gnome-terminal basé sur une version suffisamment récente de VTE), vous pouvez :set termguicolorsutiliser le Couleurs 24 bits définies par votre thème vim avec highlight guifg=#rrggbb guibg=#rrggbb.

Marius Gedminas
la source
1
Cela n'a pas fonctionné, mon terminal est toujours aubergine!
David Siegel
Que puis-je dire - cela fonctionne pour moi quand je le fais :set t_Co=256 | colorscheme xoria256.
Marius Gedminas
1
Vous pouvez tester la présence de gnome-terminal dans votre vimrc, puis définir correctement la variable t_Co. Par exemple: if $COLORTERM == 'gnome-terminal'`set t_Co = 256` endif (je ne sais pas comment ajouter des blocs de code multi-lignes dans les commentaires, ajoutez donc des nouvelles lignes avant et après l'instruction set)
Matt
3
Il est préférable d’utiliser gnome-256color pour gnome-terminal et screen-256color pour écran.
graywh
3
@trusktr google up CSApprox et les extensions vim CSExact.
Marius Gedminas
44

Une solution plus générale consiste à installer le terme de type "xterm-256color". Dans 10.04, je pense que c'est installé par défaut. Auparavant, vous deviez installer "ncurses-term" pour l'obtenir.

Ensuite, définissez le type de terme dans .bashrc avec ce qui suit:

if [ -n "$DISPLAY" -a "$TERM" == "xterm" ]; then
    export TERM=xterm-256color
fi

Si vous préférez ne disposer que de la capacité 256 couleurs pour certains programmes (peut-être en confondre d'autres), utilisez plutôt:

TERM=xterm-256color myprogram

et peut-être définir cela comme un alias pour le programme.

Ensuite, vérifiez les capacités de couleur de votre terminal avec:

$ tput colors
256

Vous pouvez toujours avoir besoin du paramètre vim ci-dessus pour que vim le reconnaisse. La plupart des applications reconnaîtront automatiquement les 256 couleurs (si elles peuvent les utiliser).

Emacs a aussi des thèmes de couleurs bien meilleurs avec 256 couleurs. Pour vérifier si elle est compatible avec 256 couleurs:

M-x list-colors-display

256colors.pl est un script Perl qui affiche toutes les couleurs de votre terminal.

Dave Jennings
la source
1
En fait, gnome-256color est plus correct pour gnome-terminal.
graywh
ça va marcher en zsh, je n'utilise pas bash?
Vinit Kumar
2
Dave, je ne suis pas sûr à 100% si elle est correcte , mais voici une version oneliner de votre commande: [[ -n "$DISPLAY" && "$TERM" = "xterm" ]] && export TERM=xterm-256color. S'il vous plaît vérifier et n'hésitez pas à l'ajouter à la poste.
JJD
@JJD devrait fonctionner, mais vous pouvez toujours utiliser ;pour rendre tout un one-liner.
Martin Ueding
1
@ dave-jennings Le lien vers le script est cassé.
Martin Ueding
36

Incluez simplement la ligne ci-dessous dans votre $HOME/.bashrc(de préférence dans la dernière ligne du fichier):

export TERM="xterm-256color"

Et enregistrez-le. Après, redémarrez votre gnome-terminal. Cette modification sera disponible non seulement dans vim, mais pour toutes vos applications de terminal.

Pour vérifier si cela fonctionne, lancez ce petit script :

#!/usr/bin/env python
# Copyright (C) 2006 by Johannes Zellner, <[email protected]>
# modified by [email protected] to fit my output needs
# modified by [email protected] to fit my output needs

import sys
import os

def echo(msg):
    os.system('echo -n "' + str(msg) + '"')

def out(n):
    os.system("tput setab " + str(n) + "; echo -n " + ("\"% 4d\"" % n))
    os.system("tput setab 0")

# normal colors 1 - 16
os.system("tput setaf 16")
for n in range(8):
    out(n)
echo("\n")
for n in range(8, 16):
    out(n)

echo("\n")
echo("\n")

y=16
while y < 231:
    for z in range(0,6):
        out(y)
        y += 1

    echo("\n")


echo("\n")

for n in range(232, 256):
    out(n)
    if n == 237 or n == 243 or n == 249:
        echo("\n")

echo("\n")
os.system("tput setaf 7")
os.system("tput setab 0")

Par la suite, vous verrez quelque chose comme ce qui suit (cela dépend de votre thème gnome-terminal):

Terminal

Crncosta
la source
2
Je me demande pourquoi faire le script en Python s'il ne contient que des commandes shell. Il y a des boucles, des flots, des ifs et des fonctions dans Bash, vous savez;)
MestreLion le
1

Eh bien, vous pouvez toujours configurer Gvim pour qu’il ressemble à Vim. Vous devez juste créer un fichier ~ / .gvimrc et y coller ces astuces de personnalisation:

set guioptions-=r  " no scrollbar on the right
set guioptions-=l  " no scrollbar on the left
set guioptions-=m  " no menu
set guioptions-=T  " no toolbar

Je ne pense pas que cela résout votre problème, mais qui sait ;-)

Wassimans
la source
0

J'ai créé un profil séparé pour Vim qui utilise une couleur opaque solide à l'arrière-plan. Je viens de passer manuellement à chaque fois que j'utilise Vim. Je ne sais pas s'il existe ou non une meilleure méthode. J'aimerais penser ainsi.

DLH
la source
2
Vous pouvez utiliser if has("gui_running")dans votre vimrc pour définir des options spécifiques à l’interface graphique.
Matt