Question Comment activer la prise en charge des couleurs dans Vim?


J'ai une belle gamme de couleurs Vim (xoria256) et il a l'air génial dans GVim, mais quand j'utilise normal vim Dans Terminal, le schéma de couleurs n'est que partiellement pris en charge. Par exemple, la couleur d'arrière-plan d'aubergine semi-transparente par défaut est utilisée. Comment faire en sorte que Terminal restitue fidèlement mes couleurs Vim?


94
2017-07-28 19:53


origine


Même la palette de couleurs par défaut est meilleure avec 256 couleurs. Si ce n'était pas pour votre question, je ne l'aurais jamais découvert. Cela devrait être la valeur par défaut. - Mihai Capotă


Réponses:


Le terminal GNOME prend en charge 256 couleurs, mais n'annonce pas son support. Vous pouvez remplacer l'autodétection de vim en mettant les éléments suivants:

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 256 couleurs et de les convertir en 16 couleurs de base. Une meilleure solution est de changer TERM en 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 termguicolors et terminal vim utilisera des couleurs complètes de 24 bits comme défini par votre thème vim en utilisant highlight guifg=#rrggbb guibg=#rrggbb.


74
2017-07-28 20:55



Cela n'a pas marché, mon terminal est toujours aubergine! - David Siegel
Que puis-je dire - ça marche pour moi quand je le fais :set t_Co=256 | colorscheme xoria256. - Marius Gedminas
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 à plusieurs lignes dans les commentaires, par conséquent, ajoutez des lignes avant et après la déclaration définie) - Matt
Mieux vaut utiliser gnome-256color pour gnome-terminal et screen-256color pour screen. - graywh
@trusktr google up Les extensions CSApprox et CSExact vim. - Marius Gedminas


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

Ensuite, définissez le type de terme dans .bashrc avec quelque chose comme ceci:

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

Si vous préférez avoir uniquement la capacité 256 couleurs pour certains programmes (peut-être confond-il 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 également des thèmes de couleurs bien meilleurs avec 256 couleurs. Pour vérifier s'il est compatible avec 256 couleurs:

M-x list-colors-display

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


44
2017-08-04 13:10



En fait, gnome-256color est plus correct pour gnome-terminal. - graywh
ça va marcher dans zsh, je n'utilise pas bash? - Vinit Kumar
Dave, je ne suis pas sûr à 100% si c'est correct mais voici un 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 ; faire tout un one-liner. - Martin Ueding
@ dave-jennings Le lien vers le script est rompu. - Martin Ueding


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

export TERM="xterm-256color"

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

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

#!/usr/bin/env python
# Copyright (C) 2006 by Johannes Zellner, <johannes@zellner.org>
# modified by mac@calmar.ws to fit my output needs
# modified by crncosta@carloscosta.org 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 ceci (dépend de votre thème gnome-terminal):

terminal


36
2017-11-25 16:21



Fonctionne comme un charme, merci! - user10962
Je me demande pourquoi faire le script en Python s'il ne contient que des commandes shell. Il y a des boucles, des whiles, des ifs et des fonctions dans Bash, vous savez;) - MestreLion


Eh bien, vous pouvez toujours configurer Gvim pour qu'il ressemble à Vim. Il vous suffit de créer un fichier ~ / .gvimrc et d'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 ;-)


1
2017-11-25 15:18





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


0
2017-07-28 20:17



Vous pouvez utiliser if has("gui_running") dans votre vimrc pour définir des options spécifiques à l'interface graphique. - Matt