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 TERMvariá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-256colore screen-256colorque 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 termcapdentro 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.confpara 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-256colorversão (pesquise "38; 5;" no arquivo), mas não consigo screen-256color. Por exemplo, onde há um \e[38;5;81mem xterm-256color(cor # 81 da paleta de 256 cores, uma sombra azul média), screen-256colorcontém \e[34mem 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-256colorversã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[34mcor 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.confe recarregar a configuração em tmux (<Cs>: fonte arquivo ~ / .tmux.conf) trabalhou para mim (edição destaque). thx


script, iniciarvim, sairvime, em seguida, sairscriptdo shell e anexar otypescriptarquivo resultante ? Em seguida, repita os mesmos passos comTERM=screen-256color vim.