desenv-web-rp.com

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

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:

enter image description here

Minha variável TERM é

  • 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 ambas as 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 a execução 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.

Eu posso duplicar o problema fora do tmux se eu 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 xterm-256color e screen-256color recursos terminais que causam 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? 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 tentei incluem:

  • Definindo explicitamente o terminal padrão que o tmux usa em ~/.tmux.conf para vários valores (alguns contra o conselho do tmux FAQ ):
 defina -g padrão-terminal "screen-256color" 
 defina -g padrão-terminal "xterm-256color" 
 defina -g padrão-terminal "screen.xterm-256color" 
 defina -g default-terminal "tmux-256color" 
  • Iniciando o tmux usando tmux -2.

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

36
Rusty Shackleford

tmux não suporta o recurso terminfo bce (apagamento da cor traseira), que vim verifica, para decidir se deseja usar o esquema "cor padrão".

Essa característica de tmux foi mencionada algumas vezes -

18
Thomas Dickey

Eu tive o problema semelhante antes. Os comentários em azul no Vim eram difíceis de ler. No .tmux.conf Defino isso:

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

E em .vimrc:

set background=dark

Agora parece o seguinte e funciona tanto no Gnome Terminal quanto no Cygwin: enter image description here

21
Vitalii Plagov

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 esquema de cores default em ambos os casos . Eu 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 será alterada para quando TERM=screen-256color. Para recuperar as cores como eram quando eu iniciei o Vim, tive que usar o esquema de cores ron. Progresso!

Encontrei um Ask Ubuntu resposta que sugere que quando o Vim relata que está usando o esquema de cores default, isso não significa necessariamente default.vim, Mas sim alguns temas específicos esquema de cores. Como a resposta aponta, um tema sombrio (que estou usando) corresponde ao esquema de cores ron, exatamente como descobri acima. (Embora este post seja sobre o Ubuntu, estou assumindo que o OP estava usando o GNOME.)

Eu também encontrei outro 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 o @LapshinDmitry fez em sua resposta e defini explicitamente colorscheme ron No meu arquivo ~/.vimrc. 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 meu ~/.vimrc Uma solução alternativa, e não a 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. Suspeito que tenha algo a ver com a maneira como o Vim interpreta os recursos do terminal entre os dois arquivos terminfo.

2
Rusty Shackleford

Minha variável TERM é Fora do tmux: xterm-256color Dentro do tmux: screen-256color

Está correto e está funcionando para mim. Experimente com um terminal diferente (eu uso o urxvt) para ver se o Gnome Terminal é o problema. O que outras pessoas estão dizendo

Verifique também COLORTERM (o meu está definido como rxvt) e unset TERMCAP.

0
laktak

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.

  • Vim8/Neovim
  • Windows 10
  • Git bash
  • Tmux 2.7

Use estas instruções para obter os binários e DLLs necessários no PATH do Git bash:

https://blog.pjsen.eu/?p=44

Use estes comandos para configurar:

echo 'set -g default-terminal "screen.xterm-256color"' > ~/.tmux.conf
tmux -2u
0
Josh Peak