Meio Ambiente:
- Fedora 25 (4.9.12-200.fc25.x86_64)
- Terminal GNOME 3.22.1 Usando o VTE versão 0.46.1 + GNUTLS
- VIM - Vi IMproved 8.0 (12 de setembro de 2016, compilado em 22 de fevereiro de 2017 16:26:11)
- tmux 2.2
Recentemente, comecei a usar o tmux e observei que as cores no Vim mudam dependendo de eu estar executando dentro ou fora do tmux. Abaixo estão as capturas de tela do Vim fora (esquerda) e dentro (direita) do tmux enquanto visualiza um diff do Git:
Minha TERM
variável é
- Fora do tmux:
xterm-256color
- Dentro do tmux:
screen-256color
O Vim relata esses tipos de terminal conforme o esperado (via :set term?
):
- Fora do tmux:
term=xterm-256color
- Dentro do tmux:
term=screen-256color
O Vim também relata que as duas instâncias estão em execução no modo de 256 cores (via :set t_Co?
):
- Fora do tmux:
t_Co=256
- Dentro do tmux:
t_Co=256
Existem muitas perguntas semelhantes por aí sobre o funcionamento do Vim no modo de 256 cores no tmux (a melhor resposta que encontrei aqui) ), mas não acho que esse seja o meu problema, dadas as informações acima.
Posso duplicar o problema fora do tmux se executar o Vim com o tipo de terminal definido como screen-256color
:
$ TERM=screen-256color vim
Então, isso me faz acreditar que há simplesmente alguma diferença entre os recursos terminal xterm-256color
e screen-256color
que causa a diferença de cor. O que leva à pergunta colocada no título: o que especificamente nos recursos do terminal faz com que as cores do Vim sejam diferentes? Eu vejo as diferenças entre executar :set termcap
dentro e fora do tmux, mas estou curioso para saber quais variáveis realmente causam a diferença de comportamento.
Independente da pergunta anterior, é possível que as cores do Vim sejam consistentes ao executar dentro ou fora do tmux? Algumas coisas que eu tentei incluem:
- Definir explicitamente o terminal padrão que o tmux usa
~/.tmux.conf
para vários valores (alguns contra o conselho da FAQ do tmux ):
defina -g default-terminal "screen-256color" defina -g default-terminal "xterm-256color" defina -g default-terminal "screen.xterm-256color" configure -g default-terminal "tmux-256color"
- Iniciando o tmux usando
tmux -2
.
Em todos os casos, o Vim continuou exibindo cores diferentes dentro do tmux.
script
, iniciarvim
, sairvim
e, em seguida, sairscript
do shell e anexar otypescript
arquivo resultante ? Em seguida, repita os mesmos passos comTERM=screen-256color vim
.xterm-256color
versão (pesquise "38; 5;" no arquivo), mas não consigoscreen-256color
. Por exemplo, onde há um\e[38;5;81m
emxterm-256color
(cor # 81 da paleta de 256 cores, uma sombra azul média),screen-256color
contém\e[34m
em vez (o padrão azul da paleta de 8 cores). Portanto, a principal questão é por que o vim não usa a paleta de 256 cores no caso deTERM=screen-256color
.xterm-256color
versão parece imprimir a tela duas vezes, primeiro com as cores herdadas e depois com a paleta de 256 cores. Pesquise, por exemplo, "F1" no arquivo, você encontrará duas correspondênciasxterm-256color
, a primeira com\e[34m
cor e a segunda com\e[38;5;81m
. Eu não sei o que está acontecendo aqui.set -g default-terminal "screen.xterm-256color"
em~/.tmux.conf
e recarregar a configuração em tmux (<Cs>: fonte arquivo ~ / .tmux.conf) trabalhou para mim (edição destaque). thxRespostas:
tmux
não suporta o recurso terminfobce
(apagamento da cor traseira), quevim
verifica, para decidir se deve usar seu esquema de "cor padrão".Essa característica
tmux
foi mencionada algumas vezes -fonte
Eu tive o problema semelhante antes. Os comentários em azul no Vim eram difíceis de ler. Em
.tmux.conf
eu defino isso:E em
.vimrc
:Agora parece o seguinte e funciona tanto no Gnome Terminal quanto no Cygwin:
fonte
bg=dark
no meu vimrc o corrigiu.$TERM
interior e o exteriortmux
eram"xterm-256color"
e, explicitamente, definir o background também o fez por mim. Obrigado!stterm
porque emxfce4-terminal
tudo parecia confortável (comentários aparecendo emcyan
vez deblue
que é muito difícil de ler com fundo escuro). após essa alteração, tudo funciona bem. Mas lembre-se de adicionarunlet! skip_defaults_vim source $VIMRUNTIME/defaults.vim
ao arquivo vimrc para usar o destaque da sintaxe, etc ...Graças à análise da @ egmont de quais cores o Vim exibia quando
TERM=screen-256color
, fui inspirado a observar o esquema de cores que o Vim está usando nos dois cenários.O Vim relata que está usando o
default
esquema de cores nos dois casos. Eu achei isso estranho, porque odefault
esquema de cores no Fedora 25 (/usr/share/vim/vim80/colors/default.vim
) não parece corresponder às cores que realmente vejo quandoTERM=xterm-256color
. Se eu definir explicitamente o esquema de cores usando:colorscheme default
whenTERM=xterm-256color
, a aparência do Vim será alterada para quandoTERM=screen-256color
. Para recuperar as cores como eram quando eu iniciei o Vim, tive que usar oron
esquema de cores. Progresso!Encontrei uma resposta do Ask Ubuntu que sugere que, quando o Vim relata que está usando o
default
esquema de cores, isso não significa necessariamente,default.vim
mas sim um esquema de cores específico do tema. Como a resposta aponta, um tema sombrio (que estou usando) corresponde aoron
esquema de cores, exatamente como descobri acima. (Embora este post seja sobre o Ubuntu, estou assumindo que o OP estava usando o GNOME.)Eu também encontrei outra pergunta que parece descrever o mesmo problema que estou tendo. Eu o encontrei enquanto pesquisava antes de postar esta pergunta, mas, por algum motivo, o esquema de cores não me pareceu relevante.
Acabei fazendo o que @LapshinDmitry fez em sua resposta e defini explicitamente
colorscheme ron
em meu~/.vimrc
arquivo. Agora, se eu inicio o Vim dentro ou fora do tmux, as cores parecem as mesmas. A única desvantagem é que se eu mudar meu tema da área de trabalho de um sabor escuro para um sabor leve, o Vim não mudará automaticamente para o esquema de cores do tema claro "padrão", que aparentemente épeachpuff
. Eu posso viver com isso, pois é improvável que eu mude de tema.Não vou aceitar esta resposta porque considero definir explicitamente o esquema de cores em
~/.vimrc
uma solução alternativa, e não na solução. Se alguém puder explicar por que o Vim carrega um esquema de cores "padrão" diferente, dependendo do valor deTERM
, ficarei feliz em aceitar essa resposta, pois estou mais interessado em entender a causa raiz. Eu suspeito que tenha algo a ver com a forma como o Vim interpreta os recursos do terminal entre os dois arquivos terminfo.fonte
vim
se comporta dessa maneira. Afinal, obce
recurso não deve ter nada a ver com o número disponível de cores.bce
capacidade do terminal, 2) se presente, selecione o esquema de cores "A", 3) caso contrário, selecione o esquema de cores "B". Acredito que a profundidade da cor seja a mesma nos dois casos (ou seja, 256 cores, comot_Co
mostra). É apenas que o esquema de cores "B" no meu sistema usa apenas uma paleta de 8 cores, mesmo que 256 cores sejam possíveis ( acho que explica o que você observou em sua análise datilografada; me corrija se estiver errado). Lembre-se, depois de executar:colorscheme ron
, vejo sequências de escape de 256 cores na mesma sessão do Vim.vim
tem decisões de design realmente estranhas.Isso está correto e está funcionando para mim. Experimente com um terminal diferente (eu uso o urxvt) para ver se o Terminal do Gnome é o problema. O que outras pessoas estão dizendo
Verifique também
COLORTERM
(o meu está definido comorxvt
) eunset TERMCAP
.fonte
TERM
érxvt-unicode-256color
) usando~/.Xdefaults
cores apropriadas e, infelizmente, ainda observamos diferentes cores dentro e fora do tmux. Para o cenário do gnome-terminal,COLORTERM
étruecolor
eTERMCAP
está vazio tanto dentro quanto fora do tmux. Para o cenário urxvt,COLORTERM
estárxvt-xpm
fora etruecolor
dentro do tmux, enquantoTERMCAP
está vazio tanto dentro quanto fora do tmux.:help xterm-true-color
ou tente com uma configuração mais padrão do Vim.termguicolors
nos meus relatórios.vimrc
e nos dois casos. Vou dar uma olhada no tópico de ajuda que você referenciou; obrigado!:set termguicolors?
notermguicolors
Para minha própria referência, mais tarde, quando eu, sem dúvida, pesquisar no Google essa configuração da minha próxima máquina.
Use estas instruções para obter os binários e DLLs necessários no PATH do Git bash:
https://blog.pjsen.eu/?p=440
Use estes comandos para configurar:
fonte