Jak włączyć obsługę pełnego koloru w Vimie?

98

Mam piękny schemat kolorów Vim ( xoria256 ) i wygląda świetnie w GVimie, ale kiedy używam normalnego vimw Terminalu, schemat kolorów jest tylko częściowo obsługiwany - na przykład używany jest domyślny półprzezroczysty kolor tła bakłażana. Jak sprawić, by Terminal wiernie renderował mój schemat kolorów Vima?

David Siegel
źródło
4
Nawet domyślny schemat kolorów wygląda lepiej z 256 kolorami. Gdyby nie twoje pytanie, nigdy bym tego nie dowiedział. To powinno być domyślne.
Mihai Capotă

Odpowiedzi:

79

Terminal GNOME obsługuje 256 kolorów, ale nie reklamuje swojej obsługi. Możesz zastąpić automatyczne wykrywanie vima, stawiając następujące:

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

w twoim ~ / .vimrc.

Uwaga : jeśli używasz ekranu GNU, z przyjemnością zje on te 256-kolorowe kody i przekonwertuje je na podstawowe 16 kolorów. Lepszym rozwiązaniem jest zmiana TERM na xterm-256color przed uruchomieniem screen / vim.

Aktualizacja na rok 2017 : jeśli masz odpowiednio najnowszą wersję Vima (7.4.1799 lub nowszą) oraz wystarczająco zaawansowany emulator terminala (xterm lub terminal gnome oparty na wystarczająco najnowszej wersji VTE), możesz :set termguicolorsi terminal vim użyje pełnej 24-bitowe kolory zgodnie z definicją używanego motywu vim highlight guifg=#rrggbb guibg=#rrggbb.

Marius Gedminas
źródło
1
To nie zadziałało, mój terminal jest nadal oberżynowy!
David Siegel
Co mogę powiedzieć - to działa dla mnie, kiedy to robię :set t_Co=256 | colorscheme xoria256.
Marius Gedminas
1
Możesz sprawdzić obecność gnome-terminal w swoim vimrc, a następnie odpowiednio ustawić zmienną t_Co. np .: if $COLORTERM == 'gnome-terminal'`set t_Co = 256` endif (Nie jestem pewien, jak dodać wieloliniowe bloki kodu w komentarzach, więc dodaj nowe wiersze przed i po instrukcji set)
Matt
3
Lepiej używać gnome-256color dla terminala gnome i screen-256color dla ekranu.
graywh
3
@trusktr google up CSApprox i CSExact rozszerzenia vim.
Marius Gedminas,
44

Bardziej ogólnym rozwiązaniem jest zainstalowanie terminu typu „xterm-256color”. W 10.04 myślę, że jest domyślnie zainstalowany. Wcześniej trzeba było zainstalować „ncurses-term”, aby go uzyskać.

Następnie ustaw typ terminu w .bashrc za pomocą czegoś takiego:

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

Jeśli wolisz mieć tylko 256 kolorów dla niektórych programów (być może myli niektóre inne), użyj zamiast tego:

TERM=xterm-256color myprogram

i być może ustawił to jako alias dla programu.

Następnie sprawdź możliwości kolorów terminala za pomocą:

$ tput colors
256

Nadal możesz potrzebować powyższego ustawienia vima, aby vim mógł je rozpoznać. Większość aplikacji rozpozna automatycznie 256 kolorów (jeśli mogą z nich skorzystać).

Emacs ma również motywy kolorów, które są znacznie lepsze z 256 kolorami. Aby sprawdzić, czy działa w 256 kolorach:

M-x list-colors-display

256colors.pl to skrypt Perla, który wyświetli wszystkie kolory w twoim terminalu.

Dave Jennings
źródło
1
W rzeczywistości gnome-256color jest bardziej poprawny dla gnome-terminal.
graywh
czy to zadziała w Zsh, nie używam bash?
Vinit Kumar,
2
Dave, nie jestem 100% pewien, czy to jest prawidłowe, ale tutaj jest wersja oneliner Twojego polecenia: [[ -n "$DISPLAY" && "$TERM" = "xterm" ]] && export TERM=xterm-256color. Sprawdź i dodaj go do postu.
JJD
@JJD Powinno działać, ale zawsze możesz ;zrobić wszystko, aby wszystko było jedno-liniowe.
Martin Ueding,
1
@ dave-jennings Link do skryptu jest uszkodzony.
Martin Ueding,
36

Po prostu dołącz poniższy wiersz do swojego $HOME/.bashrc(najlepiej w ostatnim wierszu pliku):

export TERM="xterm-256color"

I zapisz to. Następnie zrestartuj terminal gnome. Ta zmiana będzie dostępna nie tylko w vimie, ale dla wszystkich aplikacji terminalowych.

Aby sprawdzić, czy to działa, uruchom ten mały skrypt :

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

Następnie zobaczysz coś takiego (zależy od motywu terminalu gnome):

terminal

crncosta
źródło
2
Zastanawiam się, po co tworzyć skrypt w Pythonie, jeśli zawiera on tylko polecenia powłoki. Wiesz, w Bash są pętle, whiles, ifs i funkcje;)
MestreLion
1

Zawsze możesz skonfigurować Gvima, aby wyglądał jak Vim. Musisz tylko utworzyć plik ~ / .gvimrc i wkleić w nim następujące sztuczki dostosowywania:

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

Nie sądzę, że to rozwiązuje twój problem, ale kto wie ;-)

wassimans
źródło
0

Stworzyłem osobny profil dla Vima, który używa jednolitego, nieprzezroczystego koloru w tle. Po prostu ręcznie przełączam się na to za każdym razem, gdy używam Vima. Nie jestem pewien, czy istnieje lepsza metoda. Tak myślałem

DLH
źródło
2
Możesz użyć if has("gui_running")w swoim vimrc, aby ustawić opcje specyficzne dla GUI.
Matt