Eu não coloquei color xxx
no meu .vimrc
. Então eu vejo isso quando abro o meu .vimrc
.
Então eu digito :color darcula
. E isso muda para isso.
:color
me dá darcula
aqui (naturalmente).
Então eu digito :set background=dark
. E isso muda para isso.
:color
me dá default
aqui (incrivelmente).
Então, minha pergunta é: o que exatamente faz :set background=dark
?
Eu tentei :h background
e 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 darcula
e, por :set background=dark
isso, me pergunto como escrever meu próprio esquema de cores sem ter que colocar o set background=dark
meu .vimrc
.
Peguei conselhos de @statox e coloquei set background=dark
na última linha do meu darcula.vim
. Então color darcula
me dá a terceira captura de tela. No entanto, quando coloco na primeira linha, color darcula
me dá a segunda captura de tela. Também set bg=dark
muda 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=dark
APÓS o carregamento de um esquema de cores claras?
Minha configuração inteira do vim está disponível em https://github.com/MichaelMa2014/.vim
fonte
:set bg=light
e:set bg=dark
nã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=dark
no meu.vimrc
.Respostas:
O que acontece quando você
:set background
O mecanismo básico pelo qual
:set background
funciona é realmente bastante simples e está documentado (embora não particularmente claro) em:help 'background'
.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 desativag:colors_name
e 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:
O problema é que seu
colors/darcula.vim
arquivo 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=dark
Vim, 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:color
relatóriosdefault
.(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.fonte
O documento em
:h 'background'
deve fornecer todas as informações necessárias:Seu esquema de cores define 2 grupos de cores: os usados em um fundo claro e os usados em um fundo escuro. A
background
opção informará ao vim qual grupo de cores definido pelo seu esquema de cores deve ser usado.Esse é o acompanhamento do parágrafo anterior: é o esquema de cores que define os grupos de cores e
background
seleciona um desses grupos.Finalmente, se você quiser escrever seu próprio esquema de cores sem precisar colocar
set background=dark
o 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 Aprendizfonte
set background=dark
nodarcula.vim
e 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?