Qu'est-ce que: set background = dark do?

35

Je n'ai pas mis color xxxdans mon .vimrc. Donc, je le vois quand j’ouvre pour la première fois .vimrc.

:colorme donne defaultici. Avant tout

Puis je tape :color darcula. Et cela change en ceci.

:colorme donne darculaici (naturellement). Changer les couleurs

Puis je tape :set background=dark. Et cela change en ceci.

:colorme donne defaultici (étonnamment). Changement de fond

Donc ma question est, qu'est-ce que fait exactement :set background=dark?

J'ai essayé :h backgroundet je n'ai rien trouvé d'utile. Je comprends que cette commande ne change pas le fond, seul vim changera les couleurs en conséquence. Mais je veux toujours poser cette question. Parce que je suis vraiment content de la couleur après :color darculaet :set background=darkque je me demande comment écrire mon propre jeu de couleurs sans avoir à mettre set background=darkma couleur .vimrc.

J'ai suivi les conseils de @statox et mis set background=darkà la dernière ligne de mon darcula.vim. Puis color darculame donne la troisième capture d'écran. Cependant, lorsque je le mets à la première ligne, color darculame donne la deuxième capture d'écran. Le set bg=darkchange également à la troisième capture d'écran.

J'ai supposé, en le plaçant à la première ligne, que je dis à vim que ce schéma de couleurs est conçu pour un fond sombre. En le plaçant sur la dernière ligne, sur le contraste, je laisse vim supposer que cette palette de couleurs est conçue pour un arrière-plan clair, puis lui faire changer une partie d'elle-même (lors du traitement de la dernière ligne).

Si ce que je suppose qui est arrivé est vrai, ma question reste sans réponse. Qu'est-ce que vim a changé exactement quand j'utilise set bg=darkAPRÈS avoir chargé un schéma de couleurs claires?

L'ensemble de ma configuration vim est disponible à l' adresse https://github.com/MichaelMa2014/.vim.

Michael Ma
la source
@muru Salutations! J'avais lu cette question avant de poser la mienne. Il est mentionné dans cet article que :set bg=lightet :set bg=darkne sont pas opposés, mais ce qu'ils sont exactement n'est pas expliqué. Aussi ce post est pourquoi je veux éviter :set background=darkdans mon .vimrc.
Michael Ma

Réponses:

32

Qu'est-ce qui se passe quand vous :set background

Le mécanisme de base par lequel :set backgroundfonctionne fonctionne est en fait assez simple, et il est documenté (bien que pas clairement) dans :help 'background'.

Lorsque 'background' est défini, Vim ajustera les groupes de couleurs par défaut pour la nouvelle valeur. Mais les couleurs utilisées pour la coloration syntaxique ne changeront pas. g: nom_coloris
Quand un jeu de couleurs est chargé (la variable "g: nom_couleurs" est définie), le paramètre 'background' provoque le rechargement du jeu de couleurs. Si le jeu de couleurs s'ajuste à la valeur de «fond», cela fonctionnera. Cependant, si le jeu de couleurs définit l'arrière-plan, l'effet peut être annulé.

Donc, ce qui se passe réellement lorsque l' 'background'option est modifiée est la suivante:

Si aucun jeu de couleurs n'est actuellement chargé

Vim recharge les couleurs par défaut, en utilisant les couleurs de premier plan jugées appropriées pour le nouveau paramètre de 'background'

Si un jeu de couleurs est actuellement chargé

Vim recharge le jeu de couleurs. Lorsque le jeu de couleurs est chargé, le jeu de couleurs définit les couleurs appropriées au nouveau paramètre de 'background', ou le jeu de couleurs est réinitialisé 'background' à l'ancienne valeur.

Comme vous l'avez déjà décrit, l' 'background'option ne vise pas à définir l'arrière-plan, mais plutôt à indiquer à Vim si l'arrière-plan est sombre ou clair.

Donc, si le jeu de couleurs est réinitialisé 'background', Vim considère que cela signifie que le jeu de couleurs ne prend tout simplement pas en charge le nouveau paramètre 'background'. Puisque l'utilisateur a indiqué qu'il utilise un tel arrière-plan, cela signifie que le jeu de couleurs actuel n'est plus approprié. Vim désactive g:colors_namepuis recharge les couleurs par défaut.

Si vous souhaitez explorer le code qui est exécuté quand 'background'est défini, vous pouvez commencer ici .

Que se passe-t-il dans votre installation?

Le comportement étrange que vous décrivez (dans la première version de votre question) peut être expliqué par cette ligne dans la documentation citée ci-dessus:

Lorsqu'un jeu de couleurs est chargé (la variable "g: nom_couleur" est définie)

Le problème est que votre colors/darcula.vimfichier ne définit pas cette valeur et que, même si les couleurs ont changé lors de votre appel :color darcula, Vim ne considère pas qu'un jeu de couleurs soit actuellement chargé.

Par conséquent, lorsque vous appelez :set background=darkVim, effectuez l'étape de la section "Si aucun jeu de couleurs n'est actuellement chargé" ci-dessus et définissez les couleurs par défaut pour un arrière-plan sombre. Ceci explique pourquoi :coloralors les rapports default.

(Notez cependant que le réglage des couleurs par défaut ne supprime pas , comme on pouvait s'y attendre, toutes les couleurs précédemment définies. C'est pourquoi vous obtenez les résultats que vous voyez, plutôt que les couleurs affichées lorsque vous lancez Vim en premier lieu (il y a quelques discussions à ce sujet ici )

En bref, votre jeu de couleurs est mal configuré: Voir :edit $VIMRUNTIME/colors/README.txt(en particulier la section en bas) pour plus de détails à ce sujet, et sur l’interaction entre 'background'les jeux de couleurs.

Riches
la source
Merci beaucoup! Je me sens complètement compris quand vous dites que cela "ne supprime pas, comme on peut s'y attendre, toutes les couleurs précédemment définies". Je vais sûrement aller lire les discussions!
Michael Ma
4

Le document sur :h 'background' doit fournir toutes les informations dont vous avez besoin:

Lorsqu'il est défini sur "sombre", Vim essaiera d'utiliser des couleurs qui ont bonne apparence sur un fond sombre. Lorsqu'il est défini sur "light", Vim essaiera d'utiliser des couleurs qui ont fière allure sur un fond clair. Toute autre valeur est illégale.

Votre palette de couleurs définit 2 groupes de couleurs: celles utilisées sur un fond clair et celles utilisées sur un fond sombre. L' backgroundoption indiquera à vim quel groupe de couleurs défini par votre schéma de couleurs doit être utilisé.

La définition de cette option ne modifie pas la couleur de fond, elle indique à Vim à quoi ressemble la couleur de fond. Pour changer la couleur de fond, voir :h :hi-normal.

Lorsque 'background' est défini, Vim ajustera les groupes de couleurs par défaut pour la nouvelle valeur. Mais les couleurs utilisées pour la coloration syntaxique ne changeront pas.

C’est la suite du paragraphe précédent: c’est la palette de couleurs qui définit les groupes de couleurs et backgroundsélectionne l’un de ces groupes.

Enfin , si vous voulez écrire votre propre schéma de couleurs sans avoir à mettre set background=darkdans votre vimrc, rappelez - vous qu'un colorscheme est rien de plus qu'un programme vimscript, donc rien ne vous empêche d'utiliser la commande directement dans le code de votre colorscheme comme par exemple jujubes ou apprenti

statox
la source
1
Merci! Je mets set background=darken darcula.vimet produit le même effet que quand je le mets dans .vimrc. Mais je suis toujours curieux de savoir comment Vim "essaye exactement d'utiliser des couleurs qui vont bien sur un fond sombre"? Y at-il une cartographie ou quelque chose comme ça défini quelque part?
Michael Ma