Questão Suporte de 256 cores para o fundo vim no tmux


enquanto uso vim dentro do tmux eu posso ver que o suporte de 256 cores está habilitado. com cores de $ tput

No entanto, alterar o esquema de cores no vim enquanto estiver no tmux alterará o esquema de cores em uma base por linha, mas não o plano de fundo inteiro. veja captura de tela enter image description here

Aqui está um trecho do meu arquivo .vimrc, por exemplo. Meu esquema de cores original é solarized escuro e depois de executar: colorscheme molokai você vê o que acontece.

informação

  • gnomo-terminal
  • festança

no meu ~ / .tmux.conf

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

no meu ~ / .vimrc

    set t_Co=256

no meu ~ / .bashrc

# ryan
export TERM="xterm-256color"
# ryan
alias tmux="tmux -2"

no meu ~ / .profile

# ryan 256 color support
if [ -e /usr/share/terminfo/x/xterm-256color ]; then
    export TERM='xterm-256color'
  else
    export TERM='xterm-color'
  fi

Alguma idéia de como eu posso obter uma mudança completa de esquema de cores no vim? Todos os meus trechos dos arquivos estão bons?


93


origem


O que acontece se você pressionar control-l no modo normal ou executar o comando ": redraw"? - Heptite
@Heptite nada acontece ainda a mudança de cor é por linha como na imagem - winchendonsprings


Respostas:


A partir da aparência de seu .bashrc e .profile, os shells dentro do tmux estão sobrescrevendo a configuração 'default-terminal' em seu tmux conf. Algo assim:

  • tmux cria novo shell com TERM=screen-256color
  • Execução de .bashrc / .profile, conjunto TERM=xterm-256color
  • vim corre, tenta usar TERM incorreto para tmux

você pode verificar isso executando

echo $TERM

em um novo shell tmux.

O Tmux é relativamente exigente em ter um terminal configurado corretamente. Se puder, defina o valor do termo na configuração do gnome-terminal, não no seu .bashrc. Caso contrário, coloque essas configurações em uma verificação de "screen" ou "screen-256color" TERM e não as redefina nesse caso.

Tmux REALMENTE quer que o terminal definido para screen ou screen-256color


73



Bem, você consertou. Eu simplesmente comentei qualquer coisa em meus arquivos .bashrc e myprofile que tinham a ver com configurar a cor para 256. O tmux e o vim reiniciados funcionam com o segundo plano apropriado e 256 cores ativadas. Você pode me dizer onde está o arquivo de configuração do gnome-terminal? Além disso, quando você diz que o tmux quer o terminal configurado como 'scfeen-256color', você quer dizer como eu o tenho no meu tmux.conf? obrigado - winchendonsprings
Eu não tenho uma máquina com gnome-terminal útil para verificar, mas a configuração deve estar em algum lugar na GUI, provavelmente em 'configurações de perfil' ou algo parecido. - bloy
Além disso, sim, deixe o tmux fazer suas próprias coisas para os shells que ele gera. Deixe o set -g default-terminal "screen-256color" linha no seu tmux conf. - bloy
Todas as opções acima são o que eu estava procurando (certificando-se que o TERM esteja configurado corretamente e não seja substituído no tmux), e ENTÃO eu tive que usar 'tmux -2' para carregar o tmux. - phantomwhale
Experimentar if [[ $TERM == xterm ]]; then TERM=xterm-256color; fifuncionou para mim. - asymmetric


Como explicado aquidesabilitar Apagar Cor de Fundo (BCE) limpando o t_ut opção de terminal (executar :set t_ut= no Vim e depois pressione Ao controle+eu para atualizar a exibição do terminal) para que os esquemas de cores funcionem corretamente quando o Vim é usado dentro do tmux e da tela GNU.


57



isso a única coisa que finalmente funcionou para mim! - Oz123
Acabei adicionando set t_ut= ao meu vimrc que elimina a necessidade de usar manualmente o comando e não há necessidade de usar <kbd> Controle </ kbd> + <kbd> L </ kbd> desde que a sessão inicie com BCE desabilitada. - erran
Isso é essencial ao usar o PuTTY. Todas as combinações TERM ficam aquém quando o esquema de cores tem um fundo. Ótimo complemento para o segmento. - botimer
Isso funciona, no entanto, quando essa solução é aplicada, copiar e colar com o mouse também copia e cola os espaços à direita das linhas (se estiverem destacadas). - horse hair


Eu encontrei uma maneira melhor de esta postagem. Você pode fazer um alias de tmux para tmux -2 o que forçará o tmux a assumir que o shell está usando um terminal de 256 cores.


17





Isto é o que funcionou para mim no #Ubuntu e #Mac:

# File: ~/.bashrc (Ubuntu), ~/.bash_profile (Mac)
# for VIM and TMUC
if [ "$TERM" = "xterm" ]; then
  export TERM=xterm-256color
fi
alias tmux='tmux -2'  # for 256color
alias tmux='tmux -u'  # to get rid of unicode rendering problem

Recarregar configurações:

$ source ~ / .bashrc # Ubuntu

$ source ~ / .bash_profile # Mac

Configure o .bashrc para Mac (como é usado pelo tmux)

# File: ~/.bashrc (Mac)
source ~/.bash_profile

Configure a opção "default-terminal" em ~ / .tmux.conf.

# File: ~/.tmux.conf
set -g default-terminal "screen-256color"  # Mac and Ubuntu

2





Uma solução rápida é executar o seguinte no terminal.

export TERM=xterm-color

Você pode adicioná-lo ao seu ~/.bash_profile ou outro perfil para sempre ser definido no início.


1



Obrigado! Isso foi tudo que eu precisava para adicionar ao meu .zshrc para obter o modo visual para ser realmente visível. - danmcardle


Eu tive problema muito semelhante para gnome-terminal + tmux + vim mas foi estendido também para o problema de combinação de chaves específica:. Eu tive que combinar algumas coisas juntos. Primeiro de tudo eu tive que configurar o meu .tmux.conf em:

# Ensure terminal starts with its own colour scheme (helps Vim/Neovim themes to not break)
set -g default-terminal "xterm-256color"
# set -g default-terminal "screen-256color" # no S-Fx keys ;-(
# and ensure the key-codes are xterm alike
set -g xterm-keys on

Então em .vimrc:

if $COLORTERM == 'gnome-terminal'
      set t_Co=256
endif
set t_ut=

E isso fez o trabalho para as chaves e fundo.


1





Só agora enfrentou o mesmo problema. Baseado em bloyResposta e conteúdo atual do meu ~ / .profile (na verdade, é o mesmo que winchendonsprings') Eu resolvi meu problema da seguinte forma:

~/.profile:

if [[ -z $TMUX ]]; then
    if [ -e /usr/share/terminfo/x/xterm+256color ]; then # may be xterm-256 depending on your distro
        export TERM='xterm-256color'
    else
        export TERM='xterm'
    fi
else
    if [ -e /usr/share/terminfo/s/screen-256color ]; then
        export TERM='screen-256color'
    else
        export TERM='screen'
    fi
fi

A lógica é simples: se não estivermos dentro da sessão do tmux, use o xterm (colorido ou não). Caso contrário, a mesma coisa para a tela.

Talvez seja muito detalhado, mas você entendeu.


0