Wie aktiviere ich die Farbunterstützung in Vim?

98

Ich habe ein schönes Vim-Farbschema ( xoria256 ) und es sieht in GVim hervorragend aus, aber wenn ich vimin Terminal normal verwende , wird das Farbschema nur teilweise unterstützt - zum Beispiel wird die Standardfarbe für halbtransparenten Auberginenhintergrund verwendet. Wie kann ich Terminal dazu bringen, mein Vim-Farbschema originalgetreu wiederzugeben?

David Siegel
quelle
4
Sogar das Standardfarbschema sieht mit 256 Farben besser aus. Wenn Ihre Frage nicht gewesen wäre, hätte ich es nie herausgefunden. Dies sollte die Standardeinstellung sein.
Mihai Capotă

Antworten:

79

GNOME Terminal unterstützt 256 Farben, kündigt jedoch keine Unterstützung an. Sie können die automatische Erkennung von vim überschreiben, indem Sie Folgendes eingeben:

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

in deinem ~ / .vimrc.

Hinweis : Wenn Sie den GNU-Bildschirm verwenden, werden diese 256-Farben-Codes problemlos verarbeitet und in 16 Grundfarben konvertiert. Eine bessere Lösung besteht darin, TERM auf xterm-256color zu ändern, bevor Sie screen / vim starten.

Update für 2017 : Wenn Sie ein ausreichend aktuelles Vim (7.4.1799 oder neuer) und einen ausreichend fortgeschrittenen Terminal-Emulator (xterm oder gnome-terminal basierend auf einer ausreichend aktuellen Version von VTE) haben, können Sie :set termguicolorsund Terminal-Vim voll nutzen 24-Bit-Farben, wie von Ihrem vim-Thema definiert highlight guifg=#rrggbb guibg=#rrggbb.

Marius Gedminas
quelle
1
Das hat nicht funktioniert, mein Terminal ist noch aubergine!
David Siegel
Was kann ich sagen - es funktioniert bei mir, wenn ich es tue :set t_Co=256 | colorscheme xoria256.
Marius Gedminas
1
Sie können das Vorhandensein von gnome-terminal in Ihrem vimrc testen und dann die Variable t_Co entsprechend einstellen. Beispiel: if $COLORTERM == 'gnome-terminal'`set t_Co = 256` endif (Ich bin nicht sicher, wie ich mehrzeilige Codeblöcke in Kommentaren einfügen soll, also füge Zeilenumbrüche vor und nach der set-Anweisung hinzu)
Matt
3
Besser, gnome-256color für gnome-terminal und screen-256color für screen zu verwenden.
Graywh
3
@trusktr google up CSApprox und CSExact vim Erweiterungen.
Marius Gedminas
44

Eine allgemeinere Lösung besteht darin, den Begriff "xterm-256color" zu installieren. In 10.04 denke ich, dass es standardmäßig installiert ist. Zuvor mussten Sie "ncurses-term" installieren, um es zu bekommen.

Dann setzen Sie den Begriff type in .bashrc mit so etwas wie dem Folgenden:

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

Wenn Sie es vorziehen, nur die 256-Farben-Fähigkeit für bestimmte Programme zu verwenden (möglicherweise verwirrt sie einige andere):

TERM=xterm-256color myprogram

und setzen Sie das vielleicht als Alias ​​für das Programm.

Überprüfen Sie dann die Farbfunktionen Ihres Terminals mit:

$ tput colors
256

Möglicherweise benötigen Sie die oben genannte VIM-Einstellung, damit VIM sie erkennt. Die meisten Anwendungen erkennen die 256 Farben automatisch (sofern sie diese verwenden können).

Emacs hat auch Farbthemen, die mit 256 Farben viel besser sind. So überprüfen Sie, ob es 256-Farben-fähig ist:

M-x list-colors-display

256colors.pl ist ein Perl-Skript, das alle Farben in Ihrem Terminal anzeigt.

Dave Jennings
quelle
1
Eigentlich ist gnome-256color korrekter für gnome-terminal.
Graywh
wird es in zsh funktionieren, ich verwende kein bash?
Vinit Kumar
2
Dave, ich bin nicht 100% sicher , ob es richtig ist , aber hier ist eine oneliner Version Ihres Befehl: [[ -n "$DISPLAY" && "$TERM" = "xterm" ]] && export TERM=xterm-256color. Bitte überprüfen Sie und fühlen Sie sich frei, um es dem Beitrag hinzuzufügen.
JJD
@JJD Sollte funktionieren, aber Sie können immer verwenden ;, um alles zu einem Einzeiler zu machen.
Martin Ueding
1
@ Dave-Jennings Die Verknüpfung zum Skript ist unterbrochen.
Martin Ueding
36

Fügen Sie einfach die folgende Zeile in Ihre ein $HOME/.bashrc(vorzugsweise in die letzte Zeile der Datei):

export TERM="xterm-256color"

Und rette es. Starten Sie danach Ihr Gnome-Terminal neu. Diese Änderung ist nicht nur in vim verfügbar, sondern für alle Ihre Terminalanwendungen.

Führen Sie dieses kleine Skript aus , um zu überprüfen, ob es funktioniert :

#!/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")

Danach sehen Sie ungefähr Folgendes (abhängig von Ihrem Gnome-Terminal-Thema):

Terminal

crncosta
quelle
2
Ich frage mich, warum das Skript in Python erstellt wird, wenn es nur Shell-Befehle enthält. Es gibt Loops, Whiles, Ifs und Funktionen in Bash, wissen Sie;)
MestreLion
1

Nun, Sie können Gvim immer so konfigurieren, dass es wie Vim aussieht. Sie müssen nur eine ~ / .gvimrc-Datei erstellen und diese Anpassungstricks einfügen:

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

Ich denke das löst dein Problem nicht, aber wer weiß ;-)

Wassimanen
quelle
0

Ich habe ein separates Profil für Vim erstellt, das im Hintergrund eine feste, undurchsichtige Farbe verwendet. Ich wechsle einfach manuell dorthin, wenn ich Vim verwende. Nicht sicher, ob es eine bessere Methode gibt. Das würde ich gerne glauben.

DLH
quelle
2
Sie können if has("gui_running")in Ihrem vimrc GUI-spezifische Optionen festlegen.
Matt