Nie do końca rozumiem, w jaki sposób mój schemat kolorów wchodzi w interakcje z term
ustawieniem w vimie, a to utrudnia moją zdolność do prawidłowego wyświetlania w neovim.
W moim pliku .vimrc prawidłowe zachowanie danego schematu kolorów wymaga ustawienia
set term=xterm
set t_Co=256
Pominięcie któregokolwiek z tych ustawień powoduje nieprawidłowe wyświetlanie schematu kolorów:
popraw niepoprawne inne niepoprawne
Schemat wygląda następująco:
set background=dark
hi clear
if exists("syntax_on")
syntax reset
endif
let g:colors_name="impact3"
if exists("g:impact_transbg")
hi Normal ctermfg=255 ctermbg=none
hi NonText ctermfg=DarkGray ctermbg=none
hi Statement ctermfg=Blue ctermbg=none
hi Comment ctermfg=DarkGray ctermbg=none cterm=bold term=bold
hi Constant ctermfg=173 ctermbg=none
hi Identifier ctermfg=Cyan ctermbg=none
hi Type ctermfg=DarkGreen ctermbg=none
hi Folded ctermfg=0 ctermbg=235 cterm=underline term=none
hi Special ctermfg=Blue ctermbg=none
hi PreProc ctermfg=LightGray ctermbg=none cterm=bold term=bold
hi Scrollbar ctermfg=Blue ctermbg=none
hi Cursor ctermfg=white ctermbg=none
hi ErrorMsg ctermfg=Red ctermbg=none cterm=bold term=bold
hi WarningMsg ctermfg=Yellow ctermbg=none
hi VertSplit ctermfg=0 ctermbg=0
hi Directory ctermfg=Cyan ctermbg=DarkBlue
hi Visual ctermfg=White ctermbg=Gray cterm=underline term=none
hi Title ctermfg=255 ctermbg=Blue
hi String ctermfg=Blue ctermbg=none
hi StatusLine term=bold cterm=bold,underline ctermfg=White ctermbg=Black
hi StatusLineNC term=bold cterm=bold,underline ctermfg=Gray ctermbg=Black
hi LineNr term=bold cterm=bold ctermfg=2 ctermbg=None
hi Search ctermfg=Black ctermbg=2
hi TabLine ctermfg=0 ctermbg=DarkGray
hi TabLineFill ctermfg=DarkGray ctermbg=DarkGray
else
hi Normal ctermfg=White ctermbg=Black
hi NonText ctermfg=DarkGray ctermbg=Black
hi Statement ctermfg=Blue ctermbg=Black
hi Comment ctermfg=DarkGray ctermbg=Black cterm=bold term=bold
hi Constant ctermfg=DarkCyan ctermbg=Black
hi Identifier ctermfg=Cyan ctermbg=Black
hi Type ctermfg=DarkGreen ctermbg=Black
hi Folded ctermfg=DarkGreen ctermbg=Black cterm=underline term=none
hi Special ctermfg=Blue ctermbg=Black
hi PreProc ctermfg=LightGray ctermbg=Black cterm=bold term=bold
hi Scrollbar ctermfg=Blue ctermbg=Black
hi Cursor ctermfg=white ctermbg=Black
hi ErrorMsg ctermfg=Red ctermbg=Black cterm=bold term=bold
hi WarningMsg ctermfg=Yellow ctermbg=Black
hi VertSplit ctermfg=White ctermbg=Black
hi Directory ctermfg=Cyan ctermbg=DarkBlue
hi Visual ctermfg=White ctermbg=DarkGray cterm=underline term=none
hi Title ctermfg=White ctermbg=DarkBlue
hi StatusLine term=bold cterm=bold,underline ctermfg=White ctermbg=Black
hi StatusLineNC term=bold cterm=bold,underline ctermfg=Gray ctermbg=Black
hi LineNr term=bold cterm=bold ctermfg=White ctermbg=Black
endif
W neovim term
nie można ustawić. Próbowałem wywołać neovim z ręcznie ustawionym $ TERM tak:
TERM=xterm nvim
Spowodowało to prawidłowe wyświetlanie kolorów w zwykłym vimie (tj. Równoważne ustawieniu terminu w .vimrc), ale w neovim wygląda to tak:
Dlaczego kombinacja set term=xterm
i set t_Co=256
konieczna jest poprawna prezentacja tego schematu kolorów w vimie i dlaczego równoważna kombinacja ustawień daje inny efekt w neovimie?
Edytować:
Domyślnie jest to $TERM=xterm256-color
, co z jakiegoś powodu musi zostać zastąpione xterm
w zwykłym vimie, aby kolory były wyświetlane poprawnie. Z domyślną zmienną środowiskową 256, neovim wygląda następująco:
Jest to identyczne z regularnym vimem xterm256-color
, ale nie zgodnie z przeznaczeniem. Moim celem jest zrozumienie, dlaczego hack Xterm jest konieczny / działa w vimie i dlaczego nie wygląda tak samo w neovimie.
Zauważ, że wiele kolorów pojawia się poprawnie z powyższym ustawieniem zmiennej env, przy czym znaczącymi wyjątkami są numery linii i tło. Podejrzewam, że może to dotyczyć sposobu, w jaki kolory są określone w tym konkretnym schemacie kolorów.
źródło
set term=xterm
.Odpowiedzi:
Główna kwestia
Główny napotkany problem jest spowodowany przez kolejność poleceń w twoim
.vimrc
.Ustawić
g:impact_transbg
zmienną po załadowaniu colorscheme, a więc zmienna ma nie istnieć, gdy sprawdzana przez colorscheme wif
oświadczeniu, a druga wersja colorscheme (welse
bloku) jest używany.Aby to naprawić, wystarczy przesunąć linię ustawiającą zmienną powyżej linii, w której ładujesz schemat kolorów:
Możesz (i powinieneś!) Usunąć niepotrzebne linie z
.vimrc
:Inne sprawy
Mogę również wyjaśnić kilka innych nieporozumień / nieporozumień związanych z tym, jak to wszystko działa:
Wyjaśnienie zachowania
'term'
&'t_Co'
Twój $ TERM jest ustawiony na
xterm256-color
. Vim czyta to i pyta terminfo (lub termcap), aby dowiedzieć się, ile kolorów obsługuje terminal, a następnie't_Co'
odpowiednio ustawia . Zakładając, że Twój $ TERM jest poprawny (twój jest), a twoja baza terminfo zawiera poprawne informacje dla tego terminala (twoje), nigdy nie powinieneś ręcznie resetować't_Co'
.Jednak ręcznie ustawiasz Vima na
'term'
xterm. Twoje terminfo mówi Vimowi, że ten terminal obsługuje tylko 8 kolorów, więc dodanie tego spowoduje't_Co'
niepoprawne ustawienie na 8. Ustawiasz ręcznie z't_Co'
powrotem na 256, ale gdybyś pozostawił'term'
ustawienie z prawidłową wartością, nie musiałbyś .Nawiasem mówiąc, zmiana
't_Co'
ręczna po ustawieniug:impact_transbg
powoduje przeładowanie schematu kolorów (aby umożliwić dostosowanie schematu kolorów do nowej liczby kolorów), a ponieważg:impact_transbg
jest teraz ustawiony, otrzymujesz pożądane kolory.(Z
'term'
pominiętym ustawieniem linii ,'t_Co'
jest już ustawione na 256, gdy dojdziesz do drugiej linii w .vimrc, więc schemat kolorów nie zostanie ponownie załadowany: stąd nieprawidłowe kolory.)Podsumowując:
Wynik: Colorscheme zostanie ponownie załadowany, gdy
't_Co'
jest ustawiony na 256, kolory są prawidłowe.Wynik: Colorscheme jest ładowany
colorscheme
poleceniem, zmienna nie istnieje, kolory są nieprawidłowe.Wynik: Colorscheme jest ładowany
colorscheme
poleceniem, zmienna nie istnieje, a Vim używa tylko 8 kolorów, kolory są nieprawidłowe.Wynik: Colorscheme jest ładowany
colorscheme
poleceniem, zmienna nie istnieje, kolory są nieprawidłowe.Rezultat: Schemat kolorów został załadowany przez
colorscheme
komendę zmienna nie istnieje, więc kolory są prawidłowe. (I jako bonus'term'
i't_Co'
są również poprawne!)Zachowanie jest inne w NeoVim po prostu dlatego, że wywołanie set
't_Co'
jest ignorowane, jak już wspomnieli inni autorzy.'background'
Po ustawieniu schematu kolorów ustawiasz również
'background'
. W tym szczególnym colorscheme, jest to zupełnie niepotrzebne, ponieważ pierwsza rzeczą colorscheme nie jest zestaw'background'
do'dark'
.Zauważ, że nie zgadzam się z drugim odpowiadającym, który sugeruje, że powinieneś ustawić
'background'
po załadowaniu swojego schematu kolorów. Colorcheme może użyć wartości'background'
do dostosowania swoich kolorów, więc ustawienie'background'
przed załadowaniemchemchemchem jest bardziej oczywistym porządkiem. (Chociaż zauważ, że jeśli zmienisz'background'
ustawienie, Vim przeładuje wszystkie załadowane schematy kolorów, więc ustawienie go'background'
później również będzie działać: jest po prostu nieoptymalne.)źródło
W przypadku Neovim
t_Co
iTERM
nie ma znaczenia.Dzwonisz
set background=dark
przed i po połączeniu zcolorscheme impact3
. Przejdźset background=dark
na dół schematu kolorów i usuń drugie połączenie z vimrc.Od
:help 'background'
:Zobacz także: https://github.com/justinmk/molokai/commit/aa1cc201c743dd7d1b80bb2e2b5fbb7894ebfe5f
t_Co
to, ponieważ zakłada 256, chyba że włączysz „prawdziwy kolor” .t_*
opcje, patrz:help t_xx
.&term
na ustawienie, ponieważ jest bez znaczenia. Neovim wykorzystuje unibilium i inne mechanizmy do wykrywania możliwości terminalowych.źródło
set background=dark
instrukcji nie przyniosło żadnego efektu, ale te szczegóły dotyczące podstawowej implementacji są dla mnie o wiele bardziej cenne.Widzę, że używasz iTerm2, więc możesz spróbować:
profiles
zakładkiterminal
po prawej stronieReport terminal type
wyborzexterm-256color
źródło
xterm-256color
. Następnie wykonałem procedurę, aby znaleźć typ terminala już ustawiony w ten sposób.Brakuje Ci niesamowitej funkcji NeoVim. Istnieje env var, który pomaga w tych rzeczach. Spróbuj umieścić to w swoim nvimrc:
Lub
w skorupce.
źródło
guifg
iguibg
. Używa schematu kolorów OPctermfg
ictermbg
.Musisz skonfigurować opcje
w twoim
.config/nvim/init.vim
.źródło
guifg
iguibg
wartości RGB koloru. Schemat kolorów pytania wykorzystuje tylkoctermfg
ictermbg
.Zauważ, że konkretny schemat kolorów to tak naprawdę dwa zestawy schematów kolorów w klauzuli if-else. Istnienie zmiennej
g:impact_transbg
wybiera pożądany zestaw kolorów i pierwotnie miało na celu uwzględnienie przezroczystego tła w schemacie kolorów, z którego pochodzi .Zakomentowanie 2nd kolorystykę oraz instrukcja if-else (wyjazd tylko pożądaną kolorystykę i rezygnacji z
g:impact_transbg
) daje zamierzone zachowanie zarówno vim i neovim nawetset term=xterm
iset t_Co=256
usunięte.To implikuje, że
$TERM=xterm-256colors
zarówno w vimie, jak i neovimie warunekif exists("g:impact_transbg")
zawodzi, ale kombinacja ustawieniapozwolił warunkowi odnieść sukces. Usunięcie klauzuli if-else zgodnie z powyższym opisem rozwiązuje istotny problem, ale nadal istnieje tajemnica dotycząca interakcji między parą ustawień terminów .vimrc i
g:impact_transbg
.źródło
Spróbuj ustawić
$TERM
zmienną środowiskową w następujący sposób:Spróbuj także uruchomić nvim w ten sposób:
Jeśli to zadziała, ustaw
$TERM
zmienną w swojej powłoce na stałe.źródło
xterm-256color
. Ustawienie $ TERM przez eksport nie miało żadnego efektu.Ostatnio miałem ten problem z motywem solaryzowanym. Problem pochodzi ze
TERM
zmiennej env.Naprawiłem to, mówiąc emulatorowi terminala (terminator w moim przypadku), aby uruchomił się
env TERM=xterm-256color zsh
zamiast uruchamiać zsh jak zwykle.źródło