Tło programu Colorscheme jest niepoprawne w terminalu

13

Zaimportowałem nasłoneczniony schemat kolorów i paletę. Mój terminal ma prawidłowe kolory i tło, gvim ma prawidłowe kolory i tło, ale vim ma niepoprawnie kolorowe tło. Cały tekst jest poprawny, ale tło wydaje się być całkowicie czarne.

To jest porównanie Terminal, GVim i Vim

Oto mój .vimrc:

syntax enable

if has('gui_running')
    set background=dark
else
    set background=dark
endif

:set t_Co=256
let g:solarized_termcolors=256
colorscheme solarized

Gdyby ktoś miał jakieś sugestie, co może być przyczyną tego, byłbym bardzo zobowiązany. Uruchamiam xubuntu z domyślnym terminalem.

Powinienem również wspomnieć, że opcja światła daje bardzo żółte tło dla Vima.

Oberdiear
źródło
1
Przez „[m] y terminal ma prawidłowe kolory i tło”, czy masz na myśli powiedzieć, że postępowałeś zgodnie ze wskazówkami dotyczącymi Vima w terminalu?
Andrew
2
Postępowałem zgodnie z radą, @Andrew. Ale dziękuję.
Oberdiear,
@Oberdiear radą Andrew łączy się wyjaśnia, że należy skonfigurować terminal do korzystania solarized kolory, a nie korzystać z g:solarized_termcolors=256opcji. Jeśli z przyjemnością użyjesz nasyconych kolorów w swoim terminalu, ta metoda działa o wiele lepiej. Tekst twojego pytania sugeruje, że skonfigurowałeś terminal tak, aby używał kolektorów słonecznych (chociaż wyświetlany zrzut ekranu nie wygląda tak jak on), więc w takim przypadku, dlaczego używasz tego g:solarized_termcolors=256ustawienia?
Bogaty
Z jakiego terminala korzystasz? Mam ten skrypt dla gnome-terminal.
wchargin
@Rich, chyba nie mam poprawnie skonfigurowanej palety. Czy ty (lub ktoś inny) wiesz, jak poprawnie skonfigurować to dla Xfce Terminal?
Oberdiear

Odpowiedzi:

10

Są dwa powody, dla których myślę, że tak się dzieje:

  1. Używany przez Ciebie schemat kolorów nasyconych światłem słonecznym nie jest deklarowany ctermfgani ctermbgdotyczy żadnej z funkcji, które chcesz wyróżnić. Wypróbuj ten schemat kolorów , powinien wyglądać zasadniczo tak samo zarówno w twoim terminalu, jak i gvimie, jeśli tak jest, być może będziesz musiał zajrzeć za pomocą schematu kolorów, który deklaruje ctermfgi ctermbg.

  2. Może być konieczne upewnienie się, że emulator terminala obsługuje kolory, które próbujesz wyświetlić:


Pamiętaj, że obie te rzeczy mogą się dziać jednocześnie, ale trudno jest zdiagnozować to bez dodatkowych informacji o systemie.

El Developer
źródło
Desert256 działa dobrze, ale nie jestem wielkim fanem. Uważam, że TERMzmienna jest niepoprawna, ale nie mam pojęcia, jak ją zmienić.
Oberdiear
2
Zainstalowałem ncurses-term. Następnie uruchomiłem polecenie. Po uruchomieniu cały tekst staje się szary, a tło jest czarne.
Oberdiear,
1
Powinno być export TERM=xterm+256color, NIE „kolor s ” (liczba mnoga). Ponadto uważam, że tak powinno być xterm-256color, NIE "** + ** 256 kolorów; ale mogę się mylić, szczególnie w kwestii używania go z solaryzacją. Zgodnie z tą odpowiedzią ,# Entries with embedded plus signs are designed to be included through use/tc capabilities, not used as standalone entries.
Edward
export TERM=xterm+256colorna OSX dostajęzle-line-finish:echoti:1: no such terminfo capability: rmkx
Xeoncross
Miałem dokładnie ten problem i export TERM=xterm+256colorspomogłem vimowi solaryzacyjnemu wykryć i użyć dokładnego koloru tła, tak jak ma to mój terminal.
Shyam Habarakada
5

Świetna wiadomość, wszyscy. @Tom i @Rich ustawili mnie na właściwej ścieżce. Znalazłem rozwiązanie przedstawione tutaj . Ustawiłem mój .vimrc na prosty

syntax enable
set background=dark
set t_Co=16
colorscheme solarized

To wydaje się naprawiać wszystko. Kolory nie wydają się tak jasne w przykładach czcionek , ale to może być po prostu ja. Dla każdego, kto chce użyć Solarized colorscheme i używa xfce4-terminal, po prostu zmiana terminalrc i .vimrc rozwiązała moje główne problemy. Dziękujemy wszystkim za pomoc!

Oberdiear
źródło
1
Nie powinieneś potrzebować set t_Cowiersza w swoim vimrc: Vim może odczytać tę wartość z terminala (ustawienie 't_Co'wydaje się być kultem cargo Vima: wiele osób online zaleca to, nie rozumiejąc problemów, które próbują rozwiązać .)
Rich
Powiem tylko „screen” i „tmux” - te narzędzia zmieniają zmienną $ TERM, więc vim nie może odczytać potrzebnych informacji.
NieDzejkob
@NieDzejkob Możesz używać multipleksera terminali i nadal mieć poprawnie skonfigurowany terminal.
Bogaty
@ Bogu, czy masz coś przeciwko wyjaśnieniu, jaka jest poprawna poprawka po stronie terminala? Korzystam z tmux $TERM=screeni ustawienie t_Co=16rzeczywiście naprawia dla mnie problemy wizualne, ale przede wszystkim chciałbym wiedzieć, jaki jest związek.
ffledgling
@ffledgling Chciałbym. Może to wymagać trochę przewijania w przód i w tył, więc dołącz do mnie na czacie .
Bogaty
4

Myślę, że jest to kwestia zgodności tego colorschemez terminalem. Wtyczka w csaproxcudowny sposób rozwiązuje wiele z tych problemów.

Streszczenie:

Trudno znaleźć schematy kolorów dla terminalu Vim. Większość kolorów jest napisanych tak, aby obsługiwały tylko GVim i nie działają w ogóle w terminalu Vim.

Ta wtyczka sprawia, że ​​tylko kolory GVima działają po prostu w terminalu Vim, o ile terminal obsługuje 88 lub 256 kolorów - i większość z nich obecnie. Zwykle nie wymaga to interakcji użytkownika (ale zobacz pomoc, co zrobić, jeśli coś nie działa). Po :colorschemepomyślnym zainstalowaniu tej wtyczki, za każdym razem, gdy jej użyjesz , wykona swoją magię i sprawi, że kolory będą działać.

Linki do wtyczki:

Jonatas Eduardo
źródło
1
Jest to przydatna wtyczka, ale tutaj nie pomoże, ponieważ solaryzacja kolorów już wymaga znacznego wysiłku, aby pracować w terminalu Vim zarówno pod terminalem 16, jak i 256 kolorów.
Bogaty
4

Barwnik nasłoneczniony terminalu-Vim może działać na dwa różne sposoby.

  1. Tryb 16 kolorów: Solarized zawiera tylko 16 kolorów, więc w tym trybie ustawiasz terminal tak, aby używał kolorów Solarized jako swoich 16 kolorów, a Vim używa tylko tych kolorów. Na przykład, Vim colorscheme zażąda koloru terminala „1”, a terminal wyświetli to jako kolor szesnastkowy # dc322f.

  2. Tryb 256 kolorów, w którym wybiera najbliższe dopasowania dla swoich 16 kolorów z palety 256 kolorów.

Ta pierwsza metoda jest zdecydowanie zalecana przez autora (i przeze mnie), i brzmi to tak, jakbyś chętnie używał tej metody, ponieważ twierdzisz, że „terminal ma właściwe kolory i tło”.

Z twojego ekranu wynika jednak, że twój terminal nie ma ustawionych prawidłowych kolorów. (Biały nie jest kolorem w zestawie nasłonecznionym i chociaż nie spuściłem oka, inny kolor tekstu na zrzucie ekranu nie wygląda mi tak, jakby to był Solaryzowany „Fiolet” (# 6c71c4).)

Jeśli usuniesz ustawienia linii t_Coi g:solarized_termcolorsvimrc * i poprawnie skonfigurujesz kolory terminala, powinieneś zauważyć, że 16-kolorowy solarizedchemchem kolory zacznie działać.

* Linie te przełączają się w tryb solarny na tryb 256 (mniej wierny) kolorów. Powinno to również działać (podejrzewam, że @Jubal ma rację sugerując, że BCE jest tutaj problemem ), ale tryb 16 kolorów jest preferowany, chyba że wyraźnie nie chcesz używać solaryzacji w swoim terminalu.

Bogaty
źródło
Wierzę, że jesteś na dobrej drodze. Chyba nie mam poprawnie zainstalowanej palety. Czy mógłbyś przeprowadzić mnie przez ten proces? Doceniam twoją pomoc, @Rich.
Oberdiear
1
Wygląda na to, że twój pierwszy link nie działa.
akozi
@azoki Dzięki za poinformowanie mnie. Wygląda na to, że strona Solarized jest w trakcie (re) budowy. Na razie zmieniłem link, aby wskazywał na repozytorium github.
Bogaty
3

Wygląda na to, że znalazłeś swoją odpowiedź. Miałem ten sam problem i nic powyżej nie działało. Co pracował dla mnie było za pomocą sprzeczka użytkownikaterminalrc , w przeciwieństwie do sgerrand użytkownika .

Moje istotne vimrcto po prostu:

syntax enable
set background=dark
colorscheme solarized

Mam nadzieję, że komuś pomoże!

ohsonice
źródło
1

Więc to działa dla mnie (na wszystkich terminalach, których używałem - xterm, konsole, gnome-terminal, iterm2, roxterm - zarówno na Linuksie, jak i OS X, także z gvim i macvim):

" no other configuration than this needed for solarized
colorscheme solarized
highlight SpecialKey ctermfg=11 ctermbg=8

if &term =~ '256color'
  " Disable Background Color Erase (BCE) so that color schemes work
  " properly within 256-color terminals
  set t_ut=
endif
Jubal
źródło
To spowodowało podobny problem z ustawieniem t_Co = 16. Jestem całkiem pewien, że mam problem z paletą, ale jeszcze go nie odkryłem.
Oberdiear
Jakiego emulatora terminala używasz? Jeśli dobrze pamiętam, wbudowana konfiguracja solarna konsoli nie jest w pełni użyteczna i trzeba użyć ustawień z oryginalnego repozytorium solarnego…
Jubal
Używam terminala Xfce.
Oberdiear,
Wydaje mi się, że to zadziałało: spróbuj zmusić TERM do ustawienia xterm-256color, używając solaryzowanego ustawienia wstępnego z preferencji terminalu, a nie ze słonecznego repozytorium git xfce-terminal. To wraz z powyższym hackem BCE zrobiło dla mnie sztuczkę dla terminala xfce4.
Jubal
(Nadal jest coś podejrzanego w emulacji terminala i renderowaniu czcionek, i chyba przypomniałem sobie, dlaczego wróciłem do zwykłego starego Xterma na Linuksie…)
Jubal
0

To był problem z uruchomieniem (używam terminalu Vima w Linux Mint) i niestety nie zapisałem specyfiki wszystkiego, co zrobiłem. Oto odpowiednia sekcja mojego vimrc:

syntax enable
set background=dark
set t_Co=16
colo solarized

Warto również sprawdzić ten projekt na GitHub .

Tomek
źródło
set t_Co = 16 powoduje, że kolory są diametralnie różne od oczekiwanych. Używam również domyślnego terminalu Xubuntu to Xfce-Terminal.
Oberdiear
@Oberdiear Jeśli ustawienie t_Co = 16 wpływa w ten sposób na kolory (przy wyłączonej zmiennej g: solarized_termcolors), oznacza to, że kolory terminala nie są skonfigurowane poprawnie, aby można było korzystać z funkcji solarizowanej. Jak ustawiasz kolory terminala?
Bogaty
0

Dla mnie zadziałało usunięcie tej części twoich ustawień

if has('gui_running')
   set background=dark
else
   set background=dark
endif

Korzystam z terminala xfce4

nisennenmondai
źródło
0

Miałem też ten problem xfce-terminal.

Po krótkich badaniach odkryłem ten błąd : wszystko, co ustawisz $TERMw terminalu XFCE, jest po cichu ignorowane.

Myślę, że tak naprawdę jest to błąd podstawowej (i nieobsługiwanej) starej biblioteki VTE, z której korzysta terminal XFCE (wciąż oparty na GTK + 2). Przejście na terminal GTK + 3, który domyślnie korzysta z nowej biblioteki VTE , rozwiązało problem.

ntd
źródło