perde o esquema de cores do vim no modo tmux

228

Estou executando o iterm2 e, quando estou no modo tmux, o esquema de cores que configurei no vim não aparece. Somente o esquema de cores que defini na iterm. Se eu executar o vim a partir do shell, o esquema de cores parece correto - é apenas quando estou no modo tmux.

Eu tentei definir :colorscheme molokai vim (veja a captura de tela abaixo) e ele não muda - novamente, o esquema de cores padrão do iterm2 permanece.

Estou faltando alguma configuração para iterm ou tmux.conf? Meus dotfles estão no github aqui.

tristen
fonte
31
O que acontece quando você faz $ tmux -2?
Romainl
4
Foi totalmente isso. Qual é a bandeira -2?
tristen
11
Força o tmux a trabalhar com 256 cores.
Romainl

Respostas:

252

Eu tive o mesmo problema. A única diferença foi que eu estou usando solarizebastante então molokai.

Para corrigir o problema, configurei um alias em ~/.bashrc:

alias tmux="TERM=screen-256color-bce tmux"

E configure a default-terminalopção em ~/.tmux.conf:

set -g default-terminal "xterm"

Por fim, faça $ source ~/.bashrcpara carregar um novo alias.

Seyeong Jeong
fonte
20
Eu uso isso em vez de tmux -2como isso é mais detalhado.
thameera
97
Pessoalmente, tive que usar set -g default-terminal "screen-256color"para trabalhar, e não xtermno OS X, em uma caixa do Ubuntu. I indicado a este site: rhnh.net/2011/08/20/vim-and-tmux-on-osx
waffl
7
O alias aqui não faz sentido: está fingindo que o tmux está rodando dentro da tela ou tmux, o que quase nunca é o caso. Para dizer ao tmux para assumir que o terminal em execução suporta 256 cores, execute tmux -2ou tmux -2 attach(o tmux decide cada vez que você anexa uma sessão nova ou existente a um terminal). Um apelido sensato seria alias tmux='tmux -2'. Veja também tmux, prazo e 256 cores apoiar
Gilles 'stop SO estar mal'
3
Li em outra resposta (não consegui encontrar a referência) que não era uma boa prática forçar o TERM, embora não tenha certeza. Desde a tmux -2opção com o set -g default-terminal "screen-256color"trabalhado para mim, essa será a minha escolha. Mas obrigada mesmo assim!
Marcelocra
5
Se a .tmux.confconfiguração não parecer entrar em vigor, feche todos os processos do tmux e reinicie. Você pode simplesmente fazer set -g default-terminal "screen-256color"sem definir nenhum alias no .bashrc. Acho que as pessoas estão fazendo soluções alternativas, como o alias da variável de ambiente, porque não estão fechando todos os processos do tmux após a configuração .tmux.conf.
Chev
74

Como o @romainl menciona acima, eu precisava forçar o tmux a usar 256 cores adicionando a -2flag:

$ tmux -2

Eu adicionei alias tmux='tmux -2'ao meu bash_profile, então não esqueço :)

tristen
fonte
Na verdade, não é obrigatório: não uso, -2mas tenho 256 cores trabalhando no Vim no tmux.
Romainl
@romainl É necessário se o tmux não detectar seu terminal como tendo 256 cores, o que é bastante comum.
Gilles 'SO- stop be evil'
1
@Gilles, o Vim não detecta que o terminal suporta 256 cores porque o padrão do tmux TERMé screen. -2não muda TERMe não muda nada relacionado à cor de quais informações o Vim obtém de seu ambiente: :echo &t_Coainda retorna 8. Com as informações fornecidas, o Vim faz a coisa certa. As únicas coisas que devem ser definidos são: 1. do seu emulador de terminal TERMpara xterm-256colorou um valor equivalente como urxvt-unicode-256colore padrão 2. do tmux TERMcom set -g default-terminal "screen-256color".
romainl
@romainl A maioria dos ambientes TERMdefiniu xterm, não xterm-256colora necessidade de executar tmux -2(ou TERM=xterm-256color tmux, ou alterar o termcap ou outras maneiras de realizar a mesma coisa).
Gilles 'SO- stop be evil'
1
@Gilles, o problema é que o -2 não realiza nada que tenha impacto no comportamento do Vim em relação ao suporte a 256 cores, porque a única coisa que importa para o Vim é o seu TERM e deve ser definido no final da cadeia: no seu emulador de terminal. Se você fizer o SSH através de 5 hosts e o seu terminal estiver configurado corretamente, o Vim iniciado no 5º host verá o seu TERM de 256 cores e agirá de acordo. Se você usar o tmux em qualquer ponto da cadeia, -2 terá impacto nulo no comportamento do Vim, porque tudo o que vê é seu ambiente limitado a 8 cores, devido ao TERM: screen padrão do tmux, -2 ou não.
Romainl 11/03/2014
72

Eu tentei todas as soluções acima e o que finalmente funcionou para mim é colocar as seguintes linhas .tmux.conf:

set -g default-terminal "xterm-256color"
ElefEnt
fonte
Estou usando o tmux via SSH e também foi isso que funcionou para mim, embora não esteja usando o xterm, apenas o SSH comum.
Armen.shimoon
Eu não estava usando o ssh e essa foi a única resposta que funcionou para mim. Sessão local do iTerm no OSX 10.9.5.
Chev
Isso funciona para mim (MacOS Mojave + iTerm2 / Alacritty), graças
Adrian Magdas
31

Acabei de descobrir por que estava tendo muita confusão. Eu, como outros aqui, estava tendo dificuldade em obter a configuração do terminal padrão para entrar em vigor. Lembrei que tinha uma sessão tmux em segundo plano. Voltei a anexar minha sessão, encerrei meus processos e fechei TODOS os processos tmux. Na próxima vez em que reiniciei o tmux, a configuração do terminal padrão .tmux.confcomeçou a entrar em vigor. Não sei se outras pessoas estão fazendo isso também, mas recomendo fechar todos os processos do tmux antes de modificar o .tmux.confarquivo.

Minha configuração funcionou na minha máquina local (OSX 10.9.5 com iTerm2) sem nenhuma modificação em .bashrcou .bash_profile. Tudo que fiz foi adicionar a linha set -g default-terminal "xterm-256color"para ~/.tmux.confe reiniciado todos os processos tmux.

Minha configuração remota (ssh para o Ubuntu 14.04) funciona exatamente da mesma maneira, sem modificações .bashrc. Eu simplesmente adicionado set -g default-terminal "xterm-256color"a ~/.tmux.confna minha máquina remota e reiniciado todos os processos tmux remotos.

Você pode testar o que o Vim está vendo fazendo echo $TERMde dentro de uma sessão do tmux. Ele continuou dizendo screencomo o valor até eu reiniciar todos os processos do tmux, momento em que refletia xterm-256colorconforme o esperado.

Espero que ajude.

Chev
fonte
1
Confirmei em vários outros sistemas operacionais desde este post, fechar todos os processos e definir a default-terminalopção .tmux.conffuncionou 100% do tempo até agora.
Chev
2
eu também! eu gastaria menos tempo nisso se essa resposta fosse mais avançada.
Sigfried 24/03
21

Portanto, isso é um pouco obsoleto, mas vale a pena mencionar que o uso da tela frequentemente quebra as teclas Início e Fim. Usando

export TERM="xterm-256color"

O in deve manter a funcionalidade deles e permitir que o esquema de cores (ou linha de força) funcione bem.

Jpatrick
fonte
Obrigado por apontar isso. Eu não sabia disso. Ainda parece funcionar para o Debian derv pelo que vi até agora. Em minha defesa, o post referia-se ao OSX.
Jpatrick
tmux 1.9a, OSX 10.9.2, iTerm2 Build 1.0.0.20130622 export TERM = "xterm-256color" em .bash_profile e defina iterm como xterm-256-color, que funcionou para mim. Não há necessidade de definir nenhuma configuração do tmux.
agenteo 27/03
14

Eu precisava do vim para exibir corretamente com o tmux no terminal no ubuntu e o cygwin / mintty no windows. Eu consegui trabalhar combinando respostas como esta.

Em .bashrc:

alias tmux="tmux -2"

Em .vimrc:

" use 256 colors in terminal
if !has("gui_running")
    set t_Co=256
    set term=screen-256color
endif

" fix cursor display in cygwin
if has("win32unix")
    let &t_ti.="\e[1 q"
    let &t_SI.="\e[5 q"
    let &t_EI.="\e[1 q"
    let &t_te.="\e[0 q"
endif

com base nas respostas desta pergunta, nesta página wiki do Vim e nesta pergunta do cursor de bloco

Andrew Johnston
fonte
Eu tive o problema com o mintty e a adição da configuração do vim o corrigiu para mim. Eu nem precisava fazer o tmuxpseudônimo.
trigoman
Trigoman @, o mesmo para mim também, eu só tinha que atualizar o .vimrc.
Masood Alam
Eu tentei todas as sugestões anteriores. Apenas adicionado set t_Co=256ao .vimrc e foi corrigido. Não precisei criar um tmuxalias.
Mike
11

Eu tentei todas as instruções acima e descobri que o mais importante é adicionar explicitamente a seguinte linha no meu arquivo .bashrc.

export TERM=screen-256color

Não sei por que o alias tmux = "TERM = screen-256color-bce tmux" não funciona. Eu uso o Sierra 10.12.1.

Lion Lai
fonte
Isto é o que funcionou para mim. Exportação simples de TERM. 1
markovchain 23/08/19
10

Caso alguém precise de suporte de cores de 24 bits:

O Tmux suporta cores de 24 bits a partir da versão 2.2. Se o seu terminal suportar cores de 24 bits, adicione-o à configuração de substituições de terminal. Por exemplo,

set -ga terminal-overrides ",xterm-256color:Tc"

Minha lista de verificação do ambiente:

  • macOS Sierra 10.12.3
  • iTerm2 3.0.14 (o tipo de terminal de relatório é xterm-256color)
  • neovim 0.1.7 (Ative cores de 24 bits adicionando: xterm-256colora.vimrc )
  • tmux 2.3 (Adicionar set -ga terminal-overrides ",xterm-256color:Tc"a .tmux.conf)

Nada mais eu preciso adicionar .bashrcou .zshrc.

Espero que isso possa ajudar.

Yanzhe Chen
fonte
única coisa que funcionou para mim. o que exatamente isto faz?
quer
6

Uma vez que este é o primeiro resultado no Google e nenhuma das opções acima ajudou .. queria postar isso para que alguém pudesse achar útil

em .vimrc:

set background=dark
set t_Co=256

HTH

HK_
fonte
Testei essas duas linhas e elas funcionam bem para o meu Vim no WSL-Windows10.
Llinfeng 23/10/19
1
Muito obrigado. Isso funcionou no Ubuntu 18 com gnome-terminal
Roymunson
4

A adição da seguinte linha no .tmux.conf funcionou para mim com o macOS Sierra 10.12.6,

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

Zack Zhu
fonte
O mesmo aqui. Obrigado @waffl por encontrar esta solução!
21717 Adam
3

Se você se encontrar no mesmo local que eu, que nenhuma das opções acima funcionou .. tente o seguinte:

em .tmux.conf:

set -g default-terminal "xterm"

na configuração do bash (talvez .bashrcou .bash_profile):

alias tmux="tmux -2"

e então execute:

killall tmux

e, em seguida, reinicie o tmux

eliasbagley
fonte
3

Se você usar tmuxinatorou mux, precisará adicioná-los .bashrcou .zshrc:

alias tmux='TERM=screen-256color tmux -2'
alias tmuxinator='TERM=screen-256color tmuxinator'
alias mux='TERM=screen-256color mux'

Essas forças usam 256 cores no terminal.

Então tmux, tmuxinatore o muxcomando funcionará.

qingxp9
fonte
2

Para configurar a cor correta e se livrar do problema de renderização no Ubuntu e no Mac:

verifique isso

Munish
fonte
2

Só tive que lidar com esse problema e, embora todas as respostas postadas anteriormente tenham sido úteis, elas não resolveram o problema no meu caso.

Meu problema foi corrigido removendo a seguinte linha no meu .vimrc:

set termguicolors

que era redondante com outra instrução de qualquer maneira.

Agora, com a seguinte linha encontrada em respostas anteriores no meu .tmux.conf:

export TERM="screen-256color"

tudo é bonito e colorido.

Nitlev
fonte
2

Eu removi a linha set termguicolors, mas não funciona. Definindo set notermguicolorsem vez dos .vimrctrabalhos.

alextanhongpin
fonte
1

Na página de manual tmux, adicionando sinalizador da seguinte maneira:

tmux -2

Este -2sinalizador força o tmux a ser executado no modo de 256 cores.

Isso funciona para mim

RyanLiu
fonte
1

Não tive muita sorte tentando exportar um TERMterminal diferente ou definido como padrão no meu .tmux.conf.

Minha solução para corrigir cores do vim no tmux foi adicionar esta linha a .tmux.conf:

set -g terminal-overrides 'xterm:colors=88'

Não sei por que essa substituição foi necessária, já que eu TERM=xterme o iTerm definimos o xterm também, mas parece funcionar.

Patrick Lewis
fonte
0

Estou usando o Ubuntu bionic 18.04.4 LTS e tmux 2.6. Eu tenho o mesmo problema e ele pode ser resolvido simplesmente adicionando-o ao .bashrc

export TERM=screen-256color

E é claro que não se esqueça de obtê-lo. source ~/.bashrc

Ou apenas reinicie o seu teminal

babang-parhusip
fonte