Existem duas camadas de configurações / temas em ação aqui:
-
O terminal ou emulador de terminal, no seu caso iTerm2
Dependendo do terminal, apenas uma paleta de cores limitada é suportada. "Tradicionalmente" foram 16 cores: 8 normais e 8 claras / brilhantes. Eles recebem o código 0 a 7 e 8 a 15, respectivamente. Eles também têm nomes, com os códigos
n
en+8
compartilhando o mesmo nome:-
0
e8
: preto -
1
e9
: vermelho -
2
e10
: verde -
3
e11
: amarelo -
4
e12
: azul -
5
e13
: magenta -
6
e14
: cyan -
7
e15
: white
Enquanto os nomes estão bem definidos, os valores exatos das cores não são e variam muito, mesmo nas configurações padrão para diferentes terminais. (Para exemplos, dê uma olhada na seção Cores na página da Wikipédia em código de escape ANSI ). A maioria dos emuladores de terminal permite que essas 16 cores sejam livremente configuradas pelo usuário (dê uma olhada na guia Cores nas preferências do iTerm).
Muitos (se não a maioria) dos emuladores de terminal modernos suportam uma paleta de 256 cores, que consiste nas 16 cores mencionadas acima, 216 cores em um cubo de cores 6x6x6 RGB e 32 cores em tons de cinza. Além das primeiras 16 cores, essas cores parecem ser as mesmas para a maioria dos emuladores de terminal (veja minha resposta em uma pergunta sobre isso em SO para mais detalhes).
Existe até suporte crescente para cores verdadeiras de 24 bits. De acordo com esta essência iTerm2 já suporta isso nas versões beta. (Você pode verificar isso com
for a in {0..255}; printf "\x1b[48;2;255;${a};0m \x1b[0m"
. Deve imprimir um gradiente suave de vermelho para amarelo.)Resumindo : Um tema terminal ( iTerm2 ) é apenas uma paleta de cores que mapeia os índices para os valores RGB da cor verdadeira. Alguns terminais (pelo menos no Linux; eu não sei sobre OS X e iTerm2 em particular) realmente implementam temas de cores intercambiáveis.
-
-
O shell ou aplicativo, no seu caso
zsh
com a estrutura de configuração oh-my-zsh evim
:Como o 24bit true color ainda não é amplamente suportado, os temas geralmente definem cores pelo número do índice na paleta do terminal ou até mesmo pelo nome. Por exemplo
print -P '%F{yellow}yellow %F{2}green %1Fred %F{117}light blue'
print -P
interpreta a string como se estivesse no prompt.%F
altera a cor do primeiro plano.Embora a maioria dos terminais suportem 256 cores, ainda existem alguns temas que utilizam apenas (o primeiro) 16 cores. Existem várias razões para isso:
- Funcionará "em todos os lugares" (máquinas mais antigas, terminais mal configurados).
- Para a maioria dos emuladores de terminal, as cores podem ser facilmente modificadas a gosto pelo usuário.
- Alguns temas podem até preceder a ampla disponibilidade de terminais de 256 cores.
Isso não quer dizer que não haja temas que utilizem 256 cores, pelo contrário. Eu apenas parece que o que você escolheu não é um deles.
Resumindo : Um tema de terminal (ou aplicativo) só pode atribuir a códigos de cores não valores RGB de cor verdadeira. As cores reais dependem das configurações do terminal. Se a cor for alterada no terminal, isso afetará todos os aplicativos em execução.
Assim, a diferença entre as capturas de tela do resultado esperado e o que você realmente obtém se deve à diferença nas configurações de cor dos terminais. Para resolver isso, você pode:
- modifique as configurações do iTerm2 para ajustar as cores nas capturas de tela
- use outro tema, que faz uso apenas das cores 16-256 (que são amplamente corrigidas)
- use o software true color enabled (por exemplo, iTerm2 beta (pode estar em breve na versão de lançamento, se já não estiver) e neovim ) e temas ( neovim parece usar as configurações da GUI quando a cor verdadeira está ativada). o Gist mencionado acima tem uma lista.