Nie umieściłem color xxx
w moim .vimrc
. Widzę to, kiedy po raz pierwszy otwieram .vimrc
.
Potem piszę :color darcula
. I to się zmienia.
:color
daje mi darcula
tutaj (naturalnie).
Potem piszę :set background=dark
. I to się zmienia.
:color
daje mi default
tutaj (zadziwiająco).
Moje pytanie brzmi: co dokładnie robi :set background=dark
?
Próbowałem :h background
i nie znalazłem nic pomocnego. Rozumiem, że to polecenie tak naprawdę nie zmienia tła, tylko vim odpowiednio zmieni kolory. Ale nadal chcę zadać to pytanie. Ponieważ jestem naprawdę zadowolony z kolorem po :color darcula
i :set background=dark
tak zastanawiam się, jak napisać własny schemat kolorów bez konieczności umieścić set background=dark
w moim .vimrc
.
Wziąłem porady od @statox i umieściłem set background=dark
w ostatnim wierszu mojego darcula.vim
. Następnie color darcula
daje mi trzeci zrzut ekranu. Jednak kiedy umieszczam go w pierwszej linii, color darcula
daje mi drugi zrzut ekranu. set bg=dark
Zmienia również na trzeci zrzut ekranu.
Zakładając, że umieszczam go w pierwszym wierszu, mówię vimowi, że ten schemat kolorów został zaprojektowany na ciemnym tle. W przeciwieństwie do tego, umieszczając go w ostatniej linii, pozwalam vimowi założyć, że ten schemat kolorów jest przeznaczony do jasnego tła, a następnie sam dokonuję zmiany vima (podczas przetwarzania ostatniej linii).
Jeśli to, co zakładam, stało się prawdą, moje pytanie pozostaje bez odpowiedzi. Co dokładnie zmienił vim, kiedy używam set bg=dark
PO załadowaniu jasnego schematu kolorów?
Moja cała konfiguracja vima jest dostępna na https://github.com/MichaelMa2014/.vim
źródło
:set bg=light
i:set bg=dark
nie są przeciwne, ale to, czym dokładnie są, nie zostało wyjaśnione. Również, że post jest dlaczego chcę uniknąć:set background=dark
w moim.vimrc
.Odpowiedzi:
Co się stanie, kiedy ty
:set background
Podstawowy mechanizm, dzięki któremu
:set background
działa, jest w rzeczywistości dość prosty i jest udokumentowany (choć nie szczególnie wyraźnie) w:help 'background'
.Tak więc to, co faktycznie dzieje się po
'background'
zmianie opcji, jest następujące:Jeśli nie jest aktualnie załadowany żaden schemat kolorów
Vim ponownie ładuje kolory domyślne, używając kolorów pierwszego planu uznanych za odpowiednie dla nowego ustawienia
'background'
Jeśli schemat kolorów jest aktualnie załadowany
Vim ponownie ładuje schemat kolorów. Po załadowaniu schematu kolorów albo schemat kolorów ustawia kolory odpowiednie dla nowego ustawienia
'background'
, albo schemat kolorów resetuje'background'
się do starej wartości.Jak już opisałeś,
'background'
opcja ta nie ma na celu ustawienia tła, ale poinformowanie Vima, czy tło jest ciemne czy jasne.Jeśli więc schemat kolorów zostanie zresetowany
'background'
, Vim oznacza to, że schemat kolorów po prostu nie obsługuje nowego ustawienia'background'
. Ponieważ użytkownik zaznaczył, że używa takiego tła, oznacza to, że bieżący schemat kolorów nie jest już odpowiedni, a więc Vim resetuje,g:colors_name
a następnie ponownie ładuje domyślne kolory.Jeśli chcesz poznać rzeczywisty kod, który jest uruchamiany, gdy
'background'
jest ustawiony, możesz zacząć tutaj .Co dzieje się w twojej instalacji
Dziwne zachowanie, które opisujesz (w pierwszej wersji twojego pytania) można wyjaśnić tym wierszem w cytowanej powyżej dokumentacji:
Problem polega na tym, że
colors/darcula.vim
plik nie ustawia tej wartości, więc nawet jeśli kolory się zmieniły po wywołaniu:color darcula
, Vim nie uważa, że schemat kolorów jest aktualnie ładowany.Dlatego po wywołaniu
:set background=dark
Vima wykonaj powyższy krok w sekcji „Jeśli żaden schemat kolorów nie jest aktualnie załadowany” i ustaw domyślne kolory ciemnego tła. To wyjaśnia, dlaczego:color
następnie raportydefault
.(Należy jednak pamiętać, że ustawienie domyślne kolory czy nie , jak można się spodziewać, usunąć wszystkie kolory, które wcześniej zostały ustalone, a to dlatego skończyć z wyników widać, zamiast kolorów, które są wyświetlane po najpierw załóż Vima. Tutaj jest trochę dyskusji na ten temat )
Krótko mówiąc, schemat kolorów jest źle skonfigurowany: zobacz
:edit $VIMRUNTIME/colors/README.txt
(w szczególności sekcję u dołu), aby uzyskać więcej informacji na ten temat oraz interakcji między'background'
schematami kolorów.źródło
Dokument w
:h 'background'
powinien zawierać wszystkie potrzebne informacje:Twój schemat kolorów definiuje 2 grupy kolorów: te używane na jasnym tle i te używane na ciemnym tle. Ta
background
opcja powie vimowi, która grupa kolorów zdefiniowana przez twój schemat kolorów powinna zostać użyta.Jest to kontynuacja poprzedniego akapitu: to schemat kolorów, który definiuje grupy kolorów i
background
wybiera jedną z tych grup.Wreszcie, jeśli chcesz napisać swój własny schemat kolorów bez konieczności umieścić
set background=dark
w vimrc, należy pamiętać, że colorscheme jest niczym więcej niż program w vimscript, więc nic nie stoi na przeszkodzie, używając polecenia bezpośrednio w kodzie swojej colorscheme jak np żelki lub uczeńźródło
set background=dark
siędarcula.vim
i wyprodukował sam efekt jak kiedy kładę go.vimrc
. Ale nadal jestem ciekawy, w jaki sposób Vim „próbuje używać kolorów, które dobrze wyglądają na ciemnym tle”? Czy jest gdzieś zdefiniowane mapowanie lub coś takiego?