Ich habe nicht color xxx
in meine gesteckt .vimrc
. Das sehe ich also, wenn ich meine zum ersten Mal öffne .vimrc
.
Dann tippe ich :color darcula
. Und das ändert sich.
:color
gibt mir darcula
hier (natürlich).
Dann tippe ich :set background=dark
. Und das ändert sich.
:color
gibt mir default
hier (erstaunlicherweise).
Meine Frage ist also, was genau macht :set background=dark
das?
Ich habe versucht :h background
und fand nichts hilfreich. Ich verstehe, dass dieser Befehl den Hintergrund nicht wirklich ändert, sondern nur vim die Farben entsprechend ändert. Aber ich möchte diese Frage immer noch stellen. Weil ich mit der Farbe bin wirklich glücklich nach :color darcula
und :set background=dark
so frage ich mich , wie mein eigenes Farbschema zu schreiben , ohne zu setzen, die set background=dark
in meinem .vimrc
.
Ich habe @statox um Rat gebeten und set background=dark
in die letzte Zeile meines Schreibens geschrieben darcula.vim
. Dann color darcula
gibts mir den dritten Screenshot. Wenn ich es jedoch in die erste Zeile setze, color darcula
bekomme ich den zweiten Screenshot. Auch set bg=dark
ändert sich mit dem dritten Screenshot.
Ich nahm an, indem ich es in die erste Zeile setzte, sage ich vim, dass dieses Farbschema für einen dunklen Hintergrund bestimmt ist. Indem ich es in die letzte Zeile setze, lasse ich vim davon ausgehen, dass dieses Farbschema für einen hellen Hintergrund ausgelegt ist, und veranlasse vim dann, einen Teil davon selbst zu ändern (wenn es die letzte Zeile verarbeitet).
Wenn das, was ich angenommen habe, zutrifft, ist meine Frage immer noch unbeantwortet. Was genau hat sich geändert, wenn ich set bg=dark
AFTER benutze und ein helles Farbschema geladen habe?
Meine gesamte VIM-Konfiguration ist unter https://github.com/MichaelMa2014/.vim verfügbar
quelle
:set bg=light
und:set bg=dark
nicht entgegengesetzt, aber was genau sie sind, wird nicht erklärt. Auch diesen Beitrag möchte ich:set background=dark
in meinem vermeiden.vimrc
.Antworten:
Was passiert wenn du
:set background
Der grundlegende Mechanismus, nach dem gearbeitet wird,
:set background
ist eigentlich ziemlich einfach und wird (wenn auch nicht besonders klar) in dokumentiert:help 'background'
.Wenn die
'background'
Option geändert wird, geschieht Folgendes:Wenn derzeit kein Farbschema geladen ist
Vim lädt die Standardfarben neu und verwendet Vordergrundfarben, die für die neue Einstellung von als angemessen erachtet werden
'background'
Wenn aktuell ein Farbschema geladen ist
Vim lädt das Farbschema neu. Wenn das Farbschema geladen wird , entweder die Farbgebung setzt Farben auf die neue Einstellung geeigneter
'background'
oder die Farbgebung setzt'background'
auf den alten Wert.Wie Sie bereits beschrieben haben, soll die
'background'
Option nicht den Hintergrund festlegen , sondern Vim darüber informieren, ob der Hintergrund dunkel oder hell ist.Wenn das Farbschema zurückgesetzt wird
'background'
, bedeutet dies für Vim, dass das Farbschema die neue Einstellung von einfach nicht unterstützt'background'
. Da der Benutzer angegeben hat, dass er einen solchen Hintergrund verwendet, bedeutet dies, dass das aktuelle Farbschema nicht mehr geeignet ist. Daher deaktiviert Vim die Standardfarbeng:colors_name
und lädt sie neu.Wenn Sie den tatsächlichen Code untersuchen möchten, der ausgeführt wird, wenn festgelegt
'background'
ist, können Sie hier beginnen .Was passiert in Ihrer Installation?
Das merkwürdige Verhalten, das Sie (in der ersten Version Ihrer Frage) beschreiben, kann durch diese Zeile in der oben zitierten Dokumentation erklärt werden:
Das Problem ist, dass Ihre
colors/darcula.vim
Datei diesen Wert nicht festlegt. Obwohl sich die Farben beim Aufrufen geändert haben:color darcula
, berücksichtigt Vim kein aktuell zu ladendes Farbschema.Wenn Sie
:set background=dark
Vim aufrufen, führen Sie daher den oben im Abschnitt "Wenn derzeit kein Farbschema geladen ist" beschriebenen Schritt aus und legen die Standardfarben für einen dunklen Hintergrund fest. Das erklärt warum:color
dann berichtet wirddefault
.(Beachten Sie jedoch, dass durch das Festlegen der Standardfarben möglicherweise nicht alle zuvor festgelegten Farben entfernt werden. Aus diesem Grund erhalten Sie die angezeigten Ergebnisse und nicht die angezeigten Farben starte Vim als erstes. Es gibt einige Diskussionen zu diesem Thema hier. )
Kurz gesagt, Ihr Farbschema ist falsch konfiguriert:
:edit $VIMRUNTIME/colors/README.txt
Weitere Informationen hierzu sowie zur Interaktion zwischen'background'
und zu Farbschemata finden Sie (insbesondere im Abschnitt unten) .quelle
Das Dokument unter
:h 'background'
sollte alle Informationen enthalten, die Sie benötigen:Ihr Farbschema definiert zwei Gruppen von Farben: die auf hellem Hintergrund und die auf dunklem Hintergrund. Die
background
Option teilt vim mit, welche von Ihrem Farbschema definierte Gruppe von Farben verwendet werden soll.Das ist die Fortsetzung des vorherigen Abschnitts: Es ist das Farbschema, das die Gruppen von Farben definiert und
background
eine dieser Gruppen auswählt.Wenn Sie Ihr eigenes Farbschema schreiben möchten, ohne
set background=dark
Ihr vimrc eingeben zu müssen, denken Sie daran, dass ein Farbschema nichts anderes als ein Programm in Vimscript ist. Nichts hindert Sie daran, den Befehl direkt im Code Ihres Farbschemas zu verwenden, wie z. B. Jellybeans oder Lehrlingquelle
set background=dark
indarcula.vim
und erzeugen die gleiche Wirkung , wie wenn ich es in.vimrc
. Aber ich bin immer noch neugierig, wie genau Vim "versucht, Farben zu verwenden, die auf einem dunklen Hintergrund gut aussehen"? Gibt es irgendwo ein Mapping oder so?