O que faz: set background = dark do?


35

Eu não coloquei color xxxno meu .vimrc. Então eu vejo isso quando abro o meu .vimrc.

:colorme dá defaultaqui. Antes de qualquer coisa

Então eu digito :color darcula. E isso muda para isso.

:colorme dá darculaaqui (naturalmente). Alterar esquema de cores

Então eu digito :set background=dark. E isso muda para isso.

:colorme dá defaultaqui (incrivelmente). Mude o fundo

Então, minha pergunta é: o que exatamente faz :set background=dark?

Eu tentei :h backgrounde não achei nada útil. Entendo que esse comando não altera realmente o plano de fundo, apenas o vim altera as cores de acordo. Mas ainda quero fazer esta pergunta. Porque eu estou realmente feliz com a cor depois :color darculae, por :set background=darkisso, me pergunto como escrever meu próprio esquema de cores sem ter que colocar o set background=darkmeu .vimrc.

Peguei conselhos de @statox e coloquei set background=darkna última linha do meu darcula.vim. Então color darculame dá a terceira captura de tela. No entanto, quando coloco na primeira linha, color darculame dá a segunda captura de tela. Também set bg=darkmuda para a terceira captura de tela.

Presumi que, colocando-o na primeira linha, estou dizendo ao vim que esse esquema de cores foi desenvolvido para um fundo escuro. Ao colocá-lo na última linha, ao contrário, deixo o vim assumir que esse esquema de cores é projetado para um fundo claro e depois faço o vim alterar parte dele sozinho (quando processa a última linha).

Se o que presumo que aconteceu é verdade, minha pergunta ainda não foi respondida. O que exatamente o vim mudou quando uso set bg=darkAPÓS o carregamento de um esquema de cores claras?

Minha configuração inteira do vim está disponível em https://github.com/MichaelMa2014/.vim



Saudações @muru! Eu tinha lido essa pergunta antes de fazer a minha. É mencionado nesse post que :set bg=lighte :set bg=darknão são opostos, mas o que exatamente eles são não é explicado. Também esse post é por que eu quero evitar :set background=darkno meu .vimrc.
22617 Michael Ma

Respostas:


32

O que acontece quando você :set background

O mecanismo básico pelo qual :set backgroundfunciona é realmente bastante simples e está documentado (embora não particularmente claro) em :help 'background'.

Quando 'background' for definido, o Vim ajustará os grupos de cores padrão para o novo valor. Mas as cores usadas para realçar a sintaxe não serão alteradas. g: colors_name
Quando um esquema de cores é carregado (a variável "g: colors_name" está definida), a configuração 'background' fará com que o esquema de cores seja recarregado. Se o esquema de cores se ajustar ao valor de "plano de fundo", isso funcionará. No entanto, se o esquema de cores definir 'fundo', o efeito poderá ser desfeito.

Então, o que realmente acontece quando a 'background'opção é alterada é:

Se nenhum esquema de cores estiver carregado no momento

O Vim recarrega as cores padrão, usando cores de primeiro plano consideradas apropriadas para a nova configuração de 'background'

Se um esquema de cores estiver carregado no momento

O Vim recarrega o esquema de cores. Quando o esquema de cores é carregado, o esquema de cores define as cores apropriadas para a nova configuração de 'background'ou o esquema de cores é redefinido 'background' para o valor antigo.

Como você já descreveu, a 'background'opção não visa definir o plano de fundo, mas informar o Vim se o plano de fundo é escuro ou claro.

Portanto, se o esquema de cores for redefinido 'background', o Vim entenderá que o esquema de cores simplesmente não suporta a nova configuração de 'background'. Como o usuário indicou que está usando esse plano de fundo, isso significa que o esquema de cores atual não é mais apropriado e, portanto, o Vim desativa g:colors_namee recarrega as cores padrão.

Se você deseja explorar o código real que é executado quando 'background'definido, você pode começar aqui .

O que está acontecendo em sua instalação

O comportamento estranho que você descreve (na primeira versão da sua pergunta) pode ser explicado por esta linha na documentação citada acima:

Quando um esquema de cores é carregado (a variável "g: colors_name" é definida)

O problema é que seu colors/darcula.vimarquivo não define esse valor e, mesmo que as cores tenham mudado quando você chamou :color darcula, o Vim não considera um esquema de cores atualmente carregado.

Portanto, quando você chama o :set background=darkVim, executa a etapa na seção "Se nenhum esquema de cores estiver carregado no momento" acima e define as cores padrão para um fundo escuro. Isso explica o porquê dos :colorrelatórios default.

(Note, no entanto, que definir as cores padrão faz não , como se poderia esperar, remova todas as cores que tinham sido previamente definido, e é por isso que você acabar com os resultados que você vê, em vez das cores que são exibidas quando você inicie o Vim em primeiro lugar. Há alguma discussão sobre esse problema aqui )

Em resumo, seu esquema de cores está mal configurado: Veja :edit $VIMRUNTIME/colors/README.txt(em particular a seção na parte inferior) para obter mais detalhes sobre isso e sobre a interação entre os 'background'esquemas de cores e.


Muito obrigado! Sinto-me completamente compreendido quando você diz "não remove, como seria de esperar, todas as cores que haviam sido definidas anteriormente". Certamente irei ler as discussões!
Michael Ma

4

O documento em :h 'background' deve fornecer todas as informações necessárias:

Quando definido como "escuro", o Vim tenta usar cores que ficam bem em um fundo escuro. Quando definido como "claro", o Vim tenta usar cores que ficam bem em um fundo claro. Qualquer outro valor é ilegal.

Seu esquema de cores define 2 grupos de cores: os usados ​​em um fundo claro e os usados ​​em um fundo escuro. A backgroundopção informará ao vim qual grupo de cores definido pelo seu esquema de cores deve ser usado.

A configuração dessa opção não altera a cor do plano de fundo, informa ao Vim como é a cor do plano de fundo. Para alterar a cor de fundo, consulte :h :hi-normal.

Quando 'background' for definido, o Vim ajustará os grupos de cores padrão para o novo valor. Mas as cores usadas para realçar a sintaxe não serão alteradas.

Esse é o acompanhamento do parágrafo anterior: é o esquema de cores que define os grupos de cores e backgroundseleciona um desses grupos.

Finalmente, se você quiser escrever seu próprio esquema de cores sem precisar colocar set background=darko vimrc, lembre-se de que um esquema de cores não passa de um programa em vimscript; portanto, nada impede você de usar o comando diretamente no código do esquema de cores, como, por exemplo, jujubas ou Aprendiz


1
Obrigado! Eu coloquei set background=darkno darcula.vime produziu o mesmo efeito que quando eu colocá-lo em .vimrc. Mas ainda estou curioso, como exatamente o Vim "tenta usar cores que ficam bem em um fundo escuro"? Existe um mapeamento ou algo assim definido em algum lugar?
22617 Michael Ma
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.