Was bedeutet: Hintergrund setzen = Dunkel machen?

35

Ich habe nicht color xxxin meine gesteckt .vimrc. Das sehe ich also, wenn ich meine zum ersten Mal öffne .vimrc.

:colorgibt mir defaulthier Vor allem

Dann tippe ich :color darcula. Und das ändert sich.

:colorgibt mir darculahier (natürlich). Farbschema ändern

Dann tippe ich :set background=dark. Und das ändert sich.

:colorgibt mir defaulthier (erstaunlicherweise). Hintergrund ändern

Meine Frage ist also, was genau macht :set background=darkdas?

Ich habe versucht :h backgroundund 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 darculaund :set background=darkso frage ich mich , wie mein eigenes Farbschema zu schreiben , ohne zu setzen, die set background=darkin meinem .vimrc.

Ich habe @statox um Rat gebeten und set background=darkin die letzte Zeile meines Schreibens geschrieben darcula.vim. Dann color darculagibts mir den dritten Screenshot. Wenn ich es jedoch in die erste Zeile setze, color darculabekomme 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=darkAFTER benutze und ein helles Farbschema geladen habe?

Meine gesamte VIM-Konfiguration ist unter https://github.com/MichaelMa2014/.vim verfügbar

Michael Ma
quelle
@muru Grüße! Ich hatte diese Frage gelesen, bevor ich sie stellte. Es wird in diesem Beitrag erwähnt, dass :set bg=lightund :set bg=darknicht entgegengesetzt, aber was genau sie sind, wird nicht erklärt. Auch diesen Beitrag möchte ich :set background=darkin meinem vermeiden .vimrc.
Michael Ma

Antworten:

32

Was passiert wenn du :set background

Der grundlegende Mechanismus, nach dem gearbeitet wird, :set backgroundist eigentlich ziemlich einfach und wird (wenn auch nicht besonders klar) in dokumentiert :help 'background'.

Wenn 'Hintergrund' eingestellt ist, passt Vim die Standardfarbgruppen für den neuen Wert an. Die für die Syntaxhervorhebung verwendeten Farben ändern sich jedoch nicht. g: colors_name
Wenn ein Farbschema geladen wird (die Variable "g: colors_name" ist gesetzt), bewirkt die Einstellung "background", dass das Farbschema neu geladen wird. Wenn sich das Farbschema an den Wert von "Hintergrund" anpasst, funktioniert dies. Wenn das Farbschema jedoch selbst den Hintergrund festlegt, wird der Effekt möglicherweise rückgängig gemacht.

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 Standardfarben g:colors_nameund 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:

Beim Laden eines Farbschemas (die Variable "g: colors_name" wird gesetzt)

Das Problem ist, dass Ihre colors/darcula.vimDatei 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=darkVim 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 :colordann berichtet wird default.

(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.txtWeitere Informationen hierzu sowie zur Interaktion zwischen 'background'und zu Farbschemata finden Sie (insbesondere im Abschnitt unten) .

Reich
quelle
Ich danke dir sehr! Ich fühle mich vollkommen verstanden, wenn Sie sagen: "Entfernt nicht, wie zu erwarten, alle zuvor eingestellten Farben." Ich werde sicher die Diskussionen lesen gehen!
Michael Ma
4

Das Dokument unter :h 'background' sollte alle Informationen enthalten, die Sie benötigen:

Bei der Einstellung "Dunkel" versucht Vim, Farben zu verwenden, die auf einem dunklen Hintergrund gut aussehen. Bei der Einstellung "Hell" versucht Vim, Farben zu verwenden, die auf hellem Hintergrund gut aussehen. Jeder andere Wert ist illegal.

Ihr Farbschema definiert zwei Gruppen von Farben: die auf hellem Hintergrund und die auf dunklem Hintergrund. Die backgroundOption teilt vim mit, welche von Ihrem Farbschema definierte Gruppe von Farben verwendet werden soll.

Durch Einstellen dieser Option wird die Hintergrundfarbe nicht geändert, sondern es wird Vim mitgeteilt, wie die Hintergrundfarbe aussieht. Informationen zum Ändern der Hintergrundfarbe finden Sie unter :h :hi-normal.

Wenn 'Hintergrund' eingestellt ist, passt Vim die Standardfarbgruppen für den neuen Wert an. Die für die Syntaxhervorhebung verwendeten Farben ändern sich jedoch nicht.

Das ist die Fortsetzung des vorherigen Abschnitts: Es ist das Farbschema, das die Gruppen von Farben definiert und backgroundeine dieser Gruppen auswählt.

Wenn Sie Ihr eigenes Farbschema schreiben möchten, ohne set background=darkIhr 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 Lehrling

statox
quelle
1
Vielen Dank! Ich habe set background=darkin darcula.vimund 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?
Michael Ma