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-256color
screen-256color
OVimreportaessestiposdeterminalcomoesperado(via:setterm?
):
term=xterm-256color
term=screen-256color
OVimtambémrelataqueambasasinstânciasestãosendoexecutadasnomodode256cores(via:sett_Co?
):
t_Co=256
t_Co=256
ExistemmuitasperguntassemelhantessobrecomofazercomqueoVimsejaexecutadonomodode256coresdentrodotmux(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
.