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

Michael Ma
fonte
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.

Rico
fonte
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

statox
fonte
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