Che cosa: set background = dark do?


35

Non ho inserito il color xxxmio .vimrc. Quindi vedo questo quando apro per la prima volta il mio .vimrc.

:colormi dà defaultqui. Prima di tutto

Quindi scrivo :color darcula. E cambia in questo.

:colormi dà darculaqui (naturalmente). Cambia colorazione

Quindi scrivo :set background=dark. E cambia in questo.

:colormi dà defaultqui (incredibilmente). Cambia sfondo

Quindi la mia domanda è: cosa fa esattamente :set background=dark?

Ho provato :h backgrounde non ho trovato nulla di utile. Capisco che questo comando in realtà non cambia lo sfondo, solo Vim cambierà i colori di conseguenza. Ma voglio ancora porre questa domanda. Perché sono molto contento del colore dopo :color darculae :set background=darkquindi mi chiedo come scrivere il mio schema di colori, senza dover mettere set background=darknel mio .vimrc.

Ho preso consigli da @statox e ho inserito set background=darkl'ultima riga della mia darcula.vim. Quindi color darculami dà il terzo screenshot. Tuttavia quando lo metto in prima linea, color darculami dà il secondo screenshot. Lo set bg=darkcambia anche al terzo screenshot.

Ho ipotizzato ponendolo alla prima riga, sto dicendo a Vim che questo schema di colori è progettato per uno sfondo scuro. Mettendolo all'ultima riga, al contrario, lascio che Vim supponga che questo schema di colori sia progettato per uno sfondo chiaro e poi lo faccio cambiare da solo (quando elabora l'ultima linea).

Se ciò che presumo sia accaduto è vero, la mia domanda è ancora senza risposta. Cosa è cambiato esattamente vim, quando uso set bg=darkAFTER ha caricato un leggero schema di colori?

Tutta la mia configurazione di vim è disponibile su https://github.com/MichaelMa2014/.vim



@muru Saluti! Avevo letto questa domanda prima di porre la mia. È menzionato in questo post che :set bg=lighte :set bg=darknon sono contrario, ma che cosa sono esattamente non è spiegato. Anche quel post è il motivo per cui voglio evitare :set background=darknel mio .vimrc.
Michael Ma,

Risposte:


32

Cosa succede quando tu :set background

Il meccanismo di base con cui :set backgroundfunziona è in realtà piuttosto semplice, ed è documentato (anche se non in modo particolarmente chiaro) :help 'background'.

Quando è impostato lo "sfondo", Vim regolerà i gruppi di colori predefiniti per il nuovo valore. Ma i colori utilizzati per l'evidenziazione della sintassi non cambieranno. g: colors_name
Quando viene caricata una combinazione di colori (è impostata la variabile "g: colors_name"), l'impostazione di "sfondo" farà ricaricare la combinazione di colori. Se la combinazione di colori si adatta al valore di "sfondo", funzionerà. Tuttavia, se la combinazione di colori imposta lo 'sfondo' stesso, l'effetto potrebbe essere annullato.

Quindi ciò che accade effettivamente quando l' 'background'opzione è cambiata è questa:

Se non è attualmente caricata alcuna combinazione di colori

Vim ricarica i colori predefiniti, usando i colori di primo piano considerati appropriati per la nuova impostazione di 'background'

Se è attualmente caricata una combinazione di colori

Vim ricarica la combinazione di colori. Quando viene caricata la combinazione di colori, la combinazione di colori imposta i colori appropriati per la nuova impostazione 'background'o la combinazione di colori ripristina 'background' il vecchio valore.

Come hai già descritto, l' 'background'opzione non ha lo scopo di impostare lo sfondo, ma piuttosto di informare Vim se lo sfondo è scuro o chiaro.

Quindi, se la combinazione di colori viene reimpostata 'background', Vim assume che ciò significhi che la combinazione di colori semplicemente non supporta la nuova impostazione di 'background'. Dato che l'utente ha indicato di utilizzare uno sfondo simile, ciò significa che la combinazione di colori corrente non è più appropriata, quindi Vim si disattiva g:colors_namee quindi ricarica i colori predefiniti.

Se desideri esplorare il codice effettivo che viene eseguito quando 'background'è impostato, puoi iniziare qui .

Cosa sta succedendo nella tua installazione

Il comportamento strano che descrivi (nella prima versione della tua domanda) può essere spiegato da questa riga nella documentazione sopra citata:

Quando viene caricata una combinazione di colori (viene impostata la variabile "g: colors_name")

Il problema è che il tuo colors/darcula.vimfile non imposta questo valore, e quindi anche se i colori sono cambiati quando hai invocato :color darcula, Vim non considera una combinazione di colori attualmente caricata.

Pertanto, quando chiami :set background=darkVim, esegui il passaggio nella sezione "Se non è attualmente caricata alcuna combinazione di colori" e imposta i colori predefiniti per uno sfondo scuro. Questo spiega perché :colorquindi segnala default.

(Si noti, tuttavia, che l'impostazione dei colori predefiniti non , come ci si potrebbe aspettare, rimuove tutti i colori che erano stati precedentemente impostati, ed è per questo che si finisce con i risultati che si vedono, piuttosto che i colori che vengono visualizzati quando si avviare Vim in primo luogo. C'è qualche discussione su questo problema qui )

In breve, la tua combinazione di colori non è configurata correttamente: vedi :edit $VIMRUNTIME/colors/README.txt(in particolare la sezione in basso) per maggiori dettagli su questo, e sull'interazione tra 'background'e combinazioni di colori.


Grazie mille! Mi sento completamente capito quando lo dici "non, come puoi immaginare, rimuovi tutti i colori precedentemente impostati". Sicuramente andrò a leggere le discussioni!
Michael Ma,

4

Il documento all'indirizzo :h 'background' dovrebbe fornire tutte le informazioni necessarie:

Se impostato su "scuro", Vim proverà a utilizzare colori che sembrano belli su uno sfondo scuro. Se impostato su "luce", Vim proverà a utilizzare colori che sembrano belli su uno sfondo chiaro. Qualsiasi altro valore è illegale.

Il tuo schema di colori definisce 2 gruppi di colori: quelli usati su uno sfondo chiaro e quelli usati su uno sfondo scuro. L' backgroundopzione dirà a Vim quale gruppo di colori definito dal tuo schema di colori dovrebbe essere usato.

L'impostazione di questa opzione non modifica il colore di sfondo, ma indica a Vim come appare il colore di sfondo. Per modificare il colore di sfondo, vedere :h :hi-normal.

Quando è impostato lo "sfondo", Vim regolerà i gruppi di colori predefiniti per il nuovo valore. Ma i colori utilizzati per l'evidenziazione della sintassi non cambieranno.

Questo è il seguito del paragrafo precedente: è lo schema dei colori che definisce i gruppi di colori e backgroundseleziona uno di questi gruppi.

Infine, se vuoi scrivere la tua set background=darkcombinazione di colori senza dover inserire il tuo vimrc, ricorda che un colorscheme non è altro che un programma in vimscript, quindi nulla ti impedisce di usare il comando direttamente nel codice del tuo schema di colori come ad esempio jellybeans o apprendista


1
Grazie! Ho messo set background=darkin darcula.vime prodotto lo stesso effetto di quando ho messo in .vimrc. Ma sono ancora curioso, come fa esattamente Vim a "provare a usare colori che sembrano belli su uno sfondo scuro"? C'è una mappatura o qualcosa del genere definito da qualche parte?
Michael Ma,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.