Não tenho um entendimento completo de como meu esquema de cores está interagindo com a term
configuração no vim e isso está impedindo minha capacidade de exibi-lo corretamente no neovim.
No meu arquivo .vimrc, o comportamento correto do esquema de cores em questão requer a configuração
set term=xterm
set t_Co=256
A omissão de uma dessas configurações resulta na exibição incorreta do esquema de cores:
correto incorreto diferente incorreto
O esquema é assim:
set background=dark
hi clear
if exists("syntax_on")
syntax reset
endif
let g:colors_name="impact3"
if exists("g:impact_transbg")
hi Normal ctermfg=255 ctermbg=none
hi NonText ctermfg=DarkGray ctermbg=none
hi Statement ctermfg=Blue ctermbg=none
hi Comment ctermfg=DarkGray ctermbg=none cterm=bold term=bold
hi Constant ctermfg=173 ctermbg=none
hi Identifier ctermfg=Cyan ctermbg=none
hi Type ctermfg=DarkGreen ctermbg=none
hi Folded ctermfg=0 ctermbg=235 cterm=underline term=none
hi Special ctermfg=Blue ctermbg=none
hi PreProc ctermfg=LightGray ctermbg=none cterm=bold term=bold
hi Scrollbar ctermfg=Blue ctermbg=none
hi Cursor ctermfg=white ctermbg=none
hi ErrorMsg ctermfg=Red ctermbg=none cterm=bold term=bold
hi WarningMsg ctermfg=Yellow ctermbg=none
hi VertSplit ctermfg=0 ctermbg=0
hi Directory ctermfg=Cyan ctermbg=DarkBlue
hi Visual ctermfg=White ctermbg=Gray cterm=underline term=none
hi Title ctermfg=255 ctermbg=Blue
hi String ctermfg=Blue ctermbg=none
hi StatusLine term=bold cterm=bold,underline ctermfg=White ctermbg=Black
hi StatusLineNC term=bold cterm=bold,underline ctermfg=Gray ctermbg=Black
hi LineNr term=bold cterm=bold ctermfg=2 ctermbg=None
hi Search ctermfg=Black ctermbg=2
hi TabLine ctermfg=0 ctermbg=DarkGray
hi TabLineFill ctermfg=DarkGray ctermbg=DarkGray
else
hi Normal ctermfg=White ctermbg=Black
hi NonText ctermfg=DarkGray ctermbg=Black
hi Statement ctermfg=Blue ctermbg=Black
hi Comment ctermfg=DarkGray ctermbg=Black cterm=bold term=bold
hi Constant ctermfg=DarkCyan ctermbg=Black
hi Identifier ctermfg=Cyan ctermbg=Black
hi Type ctermfg=DarkGreen ctermbg=Black
hi Folded ctermfg=DarkGreen ctermbg=Black cterm=underline term=none
hi Special ctermfg=Blue ctermbg=Black
hi PreProc ctermfg=LightGray ctermbg=Black cterm=bold term=bold
hi Scrollbar ctermfg=Blue ctermbg=Black
hi Cursor ctermfg=white ctermbg=Black
hi ErrorMsg ctermfg=Red ctermbg=Black cterm=bold term=bold
hi WarningMsg ctermfg=Yellow ctermbg=Black
hi VertSplit ctermfg=White ctermbg=Black
hi Directory ctermfg=Cyan ctermbg=DarkBlue
hi Visual ctermfg=White ctermbg=DarkGray cterm=underline term=none
hi Title ctermfg=White ctermbg=DarkBlue
hi StatusLine term=bold cterm=bold,underline ctermfg=White ctermbg=Black
hi StatusLineNC term=bold cterm=bold,underline ctermfg=Gray ctermbg=Black
hi LineNr term=bold cterm=bold ctermfg=White ctermbg=Black
endif
No neovim, term
não pode ser definido. Tentei invocar o neovim com um $ TERM manualmente definido da seguinte maneira:
TERM=xterm nvim
Isso produziu a exibição correta das cores no vim regular (ou seja, equivalente à definição do termo em .vimrc), mas no neovim se parece com isso:
Por que a combinação set term=xterm
e o set t_Co=256
necessário para produzir a exibição correta desse esquema de cores no vim e por que a combinação equivalente de configurações produz um resultado diferente no neovim?
Editar:
O padrão é que$TERM=xterm256-color
, por algum motivo, deve ser substituído xterm
no vim regular para que a cor seja exibida corretamente. Com a variável de ambiente no padrão 256, o neovim fica assim:
Isso é idêntico ao vim regular xterm256-color
, mas não como pretendido. Meu objetivo é entender por que o xterm hack é necessário / funcionando no vim e por que não parece o mesmo no neovim.
Observe que muitas das cores aparecem corretamente com a configuração da variável env do termo acima, com exceções notáveis como números de linha e plano de fundo. Suspeito que a maneira como as cores sejam especificadas nesse esquema de cores específico possa estar envolvida.
fonte
set term=xterm
.Respostas:
Problema principal
O principal problema que você está enfrentando é causado pela ordem dos comandos no seu
.vimrc
.Você define a
g:impact_transbg
variável depois de carregar o esquema de cores e, portanto, a variável não existe quando marcada pelaif
instrução do esquema de cores , e a segunda versão do esquema de cores (noelse
bloco) é usada.Para corrigir, basta mover a linha que define a variável acima da linha em que você carrega o esquema de cores:
Você pode (e deve!) Remover as linhas desnecessárias do seu
.vimrc
:Outros problemas
Também posso esclarecer alguns outros equívocos / confusões que você possa ter sobre como tudo isso funciona:
Explicando o comportamento de
'term'
&'t_Co'
Seu $ TERM está definido como
xterm256-color
. O Vim lê isso e consulta terminfo (ou termcap) para descobrir quantas cores o terminal suporta e depois define de't_Co'
acordo. Presumindo que seu $ TERM esteja correto (o seu é) e seu banco de dados terminfo contém as informações corretas para esse terminal (o seu contém), você nunca precisará redefinir manualmente't_Co'
.No entanto, você está configurando manualmente o Vim
'term'
para xterm. Seu terminfo informa ao Vim que este terminal suporta apenas 8 cores; portanto, adicionar isso fará com't_Co'
que seja definido incorretamente como 8. Você está configurando manualmente't_Co'
novamente para 256, mas se você tivesse deixado a'term'
configuração no valor correto, não precisaria .Aliás, quando você altera
't_Co'
manualmente após a configuraçãog:impact_transbg
, faz com que o esquema de cores seja recarregado (para permitir que o esquema de cores se adapte ao novo número de cores) e, como agorag:impact_transbg
está definido, você obtém as cores desejadas.(Com a configuração de linha
'term'
omitida, já't_Co'
está definido como 256 quando você chega à última linha no seu .vimrc e, portanto, o esquema de cores não é recarregado: portanto, cores incorretas.)Então, para recapitular:
Resultado: o esquema de cores é recarregado quando
't_Co'
definido como 256, as cores estão corretas.Resultado: o esquema de cores é carregado por
colorscheme
comando, a variável não existe, as cores estão erradas.Resultado: o esquema de cores é carregado por
colorscheme
comando, a variável não existe e o Vim usa apenas 8 cores, as cores estão erradas.Resultado: o esquema de cores é carregado por
colorscheme
comando, a variável não existe, as cores estão erradas.Resultado: Colorscheme é carregado pelo
colorscheme
comando variável faz existe, então cores estão corretas. (E como um bônus'term'
e't_Co'
também estão corretos!)O comportamento é diferente no NeoVim simplesmente porque a chamada para definir
't_Co'
é ignorada, como outros atendentes já mencionaram.'background'
Depois de definir o esquema de cores, você também define
'background'
. Para este especial colorscheme, isso é completamente desnecessário, porque a primeira coisa que o colorscheme faz é conjunto'background'
para'dark'
.Observe que eu discordo do outro respondente que sugere que você defina
'background'
após carregar o esquema de cores. O esquema de'background'
cores pode usar o valor de para ajustar suas cores; portanto, a configuração'background'
antes de carregar o esquema de cores é a ordem mais óbvia. (Embora observe que, se você alterar a'background'
configuração, o Vim recarregará todos os esquemas de cores carregados, portanto, a configuração'background'
depois também funcionará: é simplesmente não ideal.)fonte
No caso de Neovim,
t_Co
eTERM
não faça diferença.Você está ligando
set background=dark
antes e depois da ligação paracolorscheme impact3
. Váset background=dark
para a parte inferior do esquema de cores e remova a outra chamada do vimrc.De
:help 'background'
:Consulte também: https://github.com/justinmk/molokai/commit/aa1cc201c743dd7d1b80bb2e2b5fbb7894ebfe5f
t_Co
porque assume 256, a menos que você ative a "cor verdadeira" .t_*
opções, veja:help t_xx
.&term
que seja definido porque não faz sentido. O Neovim usa o unibilium e outros mecanismos para detectar recursos terminais.fonte
set background=dark
declaração não teve efeito, mas esses detalhes sobre a implementação subjacente são muito mais valiosos para mim.Vejo que você usa o iTerm2, para que você possa tentar o seguinte:
profiles
guiaterminal
à direitaReport terminal type
escolhaxterm-256color
fonte
xterm-256color
. Eu segui seu procedimento para encontrar o tipo de terminal já definido assim.Está faltando um recurso incrível do NeoVim. Há um env var que ajuda com essas coisas. Tente colocar isso no seu nvimrc:
Ou
na concha.
fonte
guifg
eguibg
. O esquema de cores do OP usactermfg
ectermbg
.Você precisa configurar opções
no seu
.config/nvim/init.vim
.fonte
guifg
eguibg
valores RGB para cores. O esquema de cores da pergunta usa apenasctermfg
ectermbg
.Observe que o esquema de cores específico é realmente dois conjuntos de esquemas de cores dentro de uma cláusula if-else. A existência da variável
g:impact_transbg
seleciona o conjunto de cores desejado e foi originalmente planejada para levar em conta fundos transparentes no esquema de cores do qual isso é derivado .Comentar o segundo esquema de cores e a instrução if-else (deixando apenas o esquema de cores desejado e eliminando
g:impact_transbg
) produz o comportamento pretendido no vim e no neovim, mesmo comset term=xterm
eset t_Co=256
removidos.Isso implica que
$TERM=xterm-256colors
, tanto no vim quanto no neovim, o condicionalif exists("g:impact_transbg")
falha, mas que a combinação de configuraçãopermitiu que o condicional fosse bem-sucedido. A remoção da cláusula if-else, conforme descrito acima, resolve o problema material, mas ainda há um mistério em relação à interação entre o par de configurações de termo .vimrc e
g:impact_transbg
.fonte
Tente definir sua
$TERM
variável de ambiente assim:Tente também iniciar o nvim assim:
Se isso funcionar, defina a
$TERM
variável no seu shell permanentemente.fonte
xterm-256color
. Definir $ TERM via exportação não teve efeito.Recentemente, tive esse problema com o tema solarizado. O problema veio da
TERM
variável env.Corrigi-o dizendo ao meu emulador de terminal (terminador no meu caso) para executar, em
env TERM=xterm-256color zsh
vez de iniciar o zsh normalmente.fonte