Por que as cores do Vim parecem diferentes dentro e fora do tmux?

20

Ambiente:

  • Fedora 25 (4.9.12-200.fc25.x86_64)
  • Terminal GNOME 3.22.1 Usando a versão 0.46.1 + GNUTLS do VTE
  • VIM - Vi IMproved 8.0 (2016 12 de setembro, compilado em 22 de fevereiro de 2017 16:26:11)
  • tmux 2.2

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é

  • Foradotmux:xterm-256color
  • Dentrodotmux:screen-256color

OVimreportaessestiposdeterminalcomoesperado(via:setterm?):

  • Foradotmux:term=xterm-256color
  • Dentrodotmux:term=screen-256color

OVimtambémrelataqueambasasinstânciasestãosendoexecutadasnomodode256cores(via:sett_Co?):

  • Foradotmux:t_Co=256
  • Dentrodotmux:t_Co=256

ExistemmuitasperguntassemelhantessobrecomofazercomqueoVimsejaexecutadonomodode256coresdentrodotmux(amelhorrespostaqueencontreié aqui ), mas não acho que seja o meu problema, dadas as informações acima.

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:

  • Definindo explicitamente o terminal padrão, o tmux usa em ~/.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"
  • Iniciando o tmux usando tmux -2 .

Em todos os casos, o Vim continuou exibindo cores diferentes dentro do tmux.

    
por Rusty Shackleford 02.03.2017 / 22:37

4 respostas

12

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 -

por 04.03.2017 / 02:49
8

Eu tive o problema semelhante antes. Comentários em azul no Vim, onde é difícil de ler. Em .tmux.conf , configurei isso:

set -g default-terminal "screen-256color"

E em .vimrc :

set background=dark

Agora, parece o seguinte e funciona tanto no Gnome Terminal como no Cygwin:

    
por 06.05.2017 / 15:03
2

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.

    
por 04.03.2017 / 02:38
0

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 .

    
por 02.03.2017 / 23:32