Suporte de 256 cores para o fundo vim no tmux

98

enquanto estiver usando o vim no tmux, posso ver que o suporte a 256 cores está ativado. com cores $ tput

No entanto, alterar o esquema de cores no vim enquanto no tmux alterará o esquema de cores em uma base por linha, mas não em todo o plano de fundo. veja a captura de telainsira a descrição da imagem aqui

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

informação

  • gnome-terminal
  • bater

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 posso obter uma alteração completa do esquema de cores no vim? Todos os meus snippets dos arquivos estão com boa aparência?

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

Respostas:

75

Pela aparência do seu .bashrc e .profile, os shells dentro do tmux estão substituindo a configuração 'default-terminal' no seu tmux conf. Algo assim:

  • O tmux cria um novo shell com TERM=screen-256color
  • .bashrc / .profile, defina TERM=xterm-256color
  • o vim é executado, tenta usar o TERM incorreto para tmux

você pode verificar isso executando

echo $TERM

em um shell tmux fresco.

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, envolva essas configurações com uma verificação de TERMO "tela" ou "tela com 256 cores" e não as redefina nesse caso.

O Tmux REALMENTE deseja que o terminal seja definido como screenouscreen-256color

bloy
fonte
5
Bem, você consertou. Eu simplesmente comentei qualquer coisa nos meus arquivos .bashrc e .profile que tinham a ver com definir a cor para 256. Reiniciado O tmux e o vim funcionam com o plano de fundo adequado e com 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 deseja que o terminal seja definido como 'scfeen-256color, você quer dizer que eu o tenho no meu tmux.conf? Obrigado
winchendonsprings
Eu não tenho uma máquina com o gnome-terminal à mão para verificar, mas a configuração deve estar em algum lugar da GUI, provavelmente em 'configurações de perfil' ou algo assim.
bloy 11/03/12
5
Além disso, sim, deixe o tmux fazer suas próprias coisas com as conchas que gera. Deixe a set -g default-terminal "screen-256color"linha em seu tmux conf.
bloy 11/03/12
2
Tudo o que foi dito acima foi o que eu estava procurando (certificando-se de que TERM corretamente definido e não substituído no tmux), e ENTÃO eu tive que usar 'tmux -2' para carregar o tmux.
Phantomwhale #
Tente if [[ $TERM == xterm ]]; then TERM=xterm-256color; fi, funcionou para mim.
assimétrica
59

Como explicado aqui , desative Apagamento de cor de fundo (BCE) limpando a t_utopção do terminal (execute :set t_ut=no Vim e pressione Control+ Lpara atualizar a exibição do terminal) para que os esquemas de cores funcionem corretamente quando o Vim for usado nas telas do tmux e GNU.

sunaku
fonte
7
essa é a única coisa que finalmente funcionou para mim!
Oz123
3
Acabei adicionando set t_ut=ao meu vimrc, o que remove a necessidade de usar manualmente o comando e não há necessidade de usar <kbd> Control </kbd> + <kbd> L </kbd>, pois a sessão começa com o BCE desativado.
21815
Isso é essencial ao usar o PuTTY. Todas as combinações TERM ficam aquém quando o esquema de cores tem um plano de fundo. Ótimo complemento para o segmento.
botimer 19/09/15
Isso funciona, no entanto, quando esta solução é aplicada copiar e colar com o mouse também copia e cola os espaços à direita linhas (se eles são realçados.)
crina de cavalo
17

Eu encontrei uma maneira melhor neste post . Você pode criar um alias do tmux no tmux -2qual forçará o tmux a assumir que o shell está usando o terminal de 256 cores.

Boogy
fonte
4

Isto é o que funcionou para mim no #Ubuntu e no #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:

$ fonte ~ / .bashrc # Ubuntu

$ source ~ / .bash_profile # Mac

Configure o .bashrc para Mac (conforme usado pelo tmux)

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

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

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

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

export TERM=xterm-color

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

Peter Dietz
fonte
Obrigado! Era tudo o que eu precisava adicionar ao meu .zshrcpara obter o modo visual realmente visível.
Danmcardle 5/05
1

Eu tive um problema muito semelhante ao gnome-terminal + tmux + vim, mas foi estendido também ao problema específico de combinação de teclas:. Eu tive que combinar algumas coisas. Antes de tudo, eu tinha que configurar meu .tmux.conf no:

# 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

Em seguida, em .vimrc:

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

E isso fez o trabalho para as chaves e os antecedentes.

P4C
fonte
1

Se você ainda enfrentar problemas: notei que o vim volta a usar a opção t_Co=8dentro do tmux, mesmo que $TERMesteja definido como screen-256color. Minha solução alternativa é esse trecho de código no vimrc:

if exists("$TMUX")
        set t_Co=256
        set notermguicolors
else
        set termguicolors
endif

A $TMUXvariável é preenchida apenas se estiver dentro de uma sessão tmux. Nesse caso, permito que o vim use 256 cores. Note que eu também desabilitei termguicolors porque o tmux não suporta cores verdadeiras.

lgalke
fonte
0

Só agora enfrentou o mesmo problema. Com base na resposta do bloy e no conteúdo atual do meu perfil ~ /. (Na verdade, é o mesmo que winchendonsprings '), resolvi meu problema da seguinte maneira:

~/.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 tmux, use xterm (colorido ou não). Caso contrário, a mesma coisa para a tela.

Talvez seja muito detalhado, mas você entendeu.

evilguc
fonte