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.
xterm-256color
versão (pesquise "38; 5;" no arquivo), mas não consigo screen-256color
. Por exemplo, onde há um \e[38;5;81m
em xterm-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 de TERM=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ências xterm-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). thx
script
, iniciarvim
, sairvim
e, em seguida, sairscript
do shell e anexar otypescript
arquivo resultante ? Em seguida, repita os mesmos passos comTERM=screen-256color vim
.