tmux não suporta o recurso terminfo bce (apagamento de cor anterior), que vim verifica, para decidir se deve usar seu esquema de "cor padrão".
Essa característica de tmux foi mencionada algumas vezes -
Ambiente:
Eu comecei recentemente a usar o tmux e observei que as cores dentro do Vim mudam dependendo se eu estou rodando dentro ou fora do tmux. Abaixo estão as imagens do Vim fora (à esquerda) e dentro (à direita) do tmux enquanto visualiza um diff do Git:
MinhavariávelTERMé
xterm-256colorscreen-256colorOVimreportaessestiposdeterminalcomoesperado(via:setterm?):
term=xterm-256colorterm=screen-256colorOVimtambémrelataqueambasasinstânciasestãosendoexecutadasnomodode256cores(via:sett_Co?):
t_Co=256t_Co=256ExistemmuitasperguntassemelhantessobrecomofazercomqueoVimsejaexecutadonomodode256coresdentrodotmux(amelhorrespostaqueencontreié
Eu posso duplicar o problema fora do tmux se eu executar o Vim com o tipo de terminal configurado como screen-256color :
$ TERM=screen-256color vim
Isso me faz acreditar que há simplesmente alguma diferença entre os recursos do terminal xterm-256color e screen-256color que causa a diferença na cor. O que leva à questão 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 correr :set termcap dentro e fora do tmux, mas estou curioso sobre quais variáveis realmente causam a diferença de comportamento.
Independente da pergunta anterior, é possível ter as cores do Vim consistentes ao rodar dentro ou fora do tmux? Algumas coisas que eu tentei incluem:
~/.tmux.conf para vários valores (alguns contra o conselho do tmux FAQ ):
set -g default-terminal "screen-256color"
set -g default-terminal "xterm-256color"
set -g default-terminal "screen.xterm-256color"
set -g default-terminal "tmux-256color"
tmux -2 . Em todos os casos, o Vim continuou exibindo cores diferentes dentro do tmux.
tmux não suporta o recurso terminfo bce (apagamento de cor anterior), que vim verifica, para decidir se deve usar seu esquema de "cor padrão".
Essa característica de tmux foi mencionada algumas vezes -
Graças à análise do @ egmont sobre as cores que o Vim emitia quando TERM=screen-256color , fiquei inspirado para ver o esquema de cores que o Vim está usando nos dois cenários.
O Vim informa que está usando o esquema de cores default em ambos casos. Achei isso estranho porque o esquema de cores default no Fedora 25 ( /usr/share/vim/vim80/colors/default.vim ) não parece corresponder às cores que eu realmente vejo quando TERM=xterm-256color . Se eu definir explicitamente o esquema de cores usando :colorscheme default quando TERM=xterm-256color , a aparência do Vim mudará para quando TERM=screen-256color . Para obter as cores de volta ao que eram quando comecei o Vim, tive que usar o esquema de cores ron . Progresso!
Eu encontrei uma resposta do Ask Ask que sugere que quando o Vim relata que está usando o esquema de cores default , ele não usa t significa necessariamente default.vim , mas sim algum esquema de cores específico do tema. Como a resposta aponta, um tema escuro (que estou usando) corresponde ao esquema de cores ron , assim como descobri acima. (Embora este post seja sobre o Ubuntu, estou assumindo que o OP estava usando o GNOME.)
Também encontrei outra pergunta que parece descrever o mesmo problema que estou tendo. Eu me deparei com isso enquanto procurava antes de postar essa 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 no meu arquivo ~/.vimrc . Agora, quer eu inicie o Vim dentro ou fora do tmux, as cores parecem iguais. A única desvantagem é que se eu mudar o 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, como é improvável que eu mude o meu tema.
Não aceitarei esta resposta porque considero explicitamente definir o esquema de cores na solução ~/.vimrc em vez da solução. Se alguém puder explicar por que o Vim carrega um esquema de cores "padrão" diferente, dependendo do valor de TERM , 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 as capacidades do terminal entre os dois arquivos terminfo.
My TERM variable is Outside tmux: xterm-256color Inside tmux: screen-256color
Isso está correto e funcionando para mim. Tente com um terminal diferente (eu uso o urxvt) para ver se o Terminal do Gnome é o problema.
Verifique também COLORTERM (o meu está definido como rxvt ) e unset TERMCAP .