Obsługa 256 kolorów dla tła vim w tmux

98

podczas używania vima w tmux widzę, że obsługa 256 kolorów jest włączona. z kolorami $ tput

Jednak zmiana schematu kolorów w vimie w tmuxie zmieni schemat kolorów w oparciu o linię, ale nie całe tło. patrz zrzut ekranuwprowadź opis zdjęcia tutaj

Oto na przykład fragment mojego pliku .vimrc. Mój oryginalny colorscheme jest solaryzowany na ciemno, a następnie po uruchomieniu: colorscheme molokai widzisz, co się dzieje.

informacje

  • terminal gnome
  • grzmotnąć

w moim ~ / .tmux.conf

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

w moim ~ / .vimrc

    set t_Co=256

w moim ~ / .bashrc

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

w moim ~ / .profile

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

Jakieś pomysły, jak mogę uzyskać pełną zmianę kolorów w vimie? Czy wszystkie moje fragmenty z plików wyglądają dobrze?

winchendonsprings
źródło
Co się stanie, jeśli naciśniesz control-l w trybie normalnym lub wykonasz polecenie „: przerysowanie”?
Heptyt
@Heptite nic się nie dzieje nadal zmiana koloru jest liniowa jak na zrzucie ekranu
winchendonsprings

Odpowiedzi:

75

Z wyglądu twojego .bashrc i .profile, powłoki wewnątrz tmux zastępują ustawienie 'default-terminal' w twoim tmux conf. Coś takiego:

  • tmux tworzy nową powłokę za pomocą TERM=screen-256color
  • .bashrc / .profile uruchom, ustaw TERM=xterm-256color
  • vim działa, próbuje użyć niepoprawnego TERM dla tmux

możesz to sprawdzić, uruchamiając

echo $TERM

w świeżej powłoce tmux.

Tmux jest dość wybredny, jeśli chodzi o prawidłowe ustawienie terminala. Jeśli możesz, ustaw wartość terminu w konfiguracji gnome-terminal, a nie w twoim .bashrc. W przeciwnym razie ustaw te ustawienia, zaznaczając pole „screen” lub „screen-256color” TERM, i nie resetuj ich w tym przypadku.

Tmux NAPRAWDĘ chce ustawić terminal na screenlubscreen-256color

bloy
źródło
5
Naprawiłeś to. Po prostu skomentowałem wszystko w moich plikach .bashrc i .profile, które miały związek z ustawieniem koloru na 256. Zrestartowane tmux i vim działa z włączonym odpowiednim tłem i 256 kolorami. Czy możesz mi powiedzieć, gdzie jest plik konfiguracyjny gnome-terminal? Również gdy powiesz, że tmux chce ustawić terminal na 'scfeen-256color, masz na myśli, że mam go w moim tmux.conf? Dzięki
winchendonsprings
Nie mam komputera z terminalem gnome do sprawdzenia, ale ustawienie powinno znajdować się gdzieś w GUI, prawdopodobnie pod „ustawieniami profilu” lub coś w tym stylu.
bloy
5
Tak, pozwól, że tmux zrobi to samo z powłokami, które spawnuje. Zostaw set -g default-terminal "screen-256color"linię w swoim tmux conf.
bloy
2
Wszystkie powyższe jest tym, czego szukałem (upewniając się, że TERM jest poprawnie ustawiony i nie jest nadpisywany w tmux), a następnie musiałem użyć „tmux -2”, aby załadować tmux w górę.
phantomwhale
Spróbuj if [[ $TERM == xterm ]]; then TERM=xterm-256color; fi, zadziałało dla mnie.
asymetryczny
59

Jak wyjaśniono tutaj , wyłącz wymazywanie koloru tła (BCE), usuwając t_utopcję terminala (uruchom :set t_ut=w Vimie, a następnie naciśnij Control+, Laby odświeżyć ekran terminala), aby schematy kolorów działały poprawnie, gdy Vim jest używany na ekranie tmux i GNU.

sunaku
źródło
7
to jedyna rzecz, która w końcu dla mnie zadziałała!
Oz123
3
Skończyło się na dodawaniu set t_ut=do mojego vimrc, co eliminuje potrzebę ręcznego używania polecenia i nie ma potrzeby używania <kbd> Control </kbd> + <kbd> L </kbd>, ponieważ sesja rozpoczyna się z wyłączonym BCE.
erran
Jest to niezbędne podczas korzystania z PuTTY. Wszystkie kombinacje TERM są niewystarczające, gdy schemat kolorów ma tło. Świetny dodatek do wątku.
botimer
Działa to jednak po zastosowaniu tego rozwiązania kopiowanie i wklejanie za pomocą myszy również kopiuje i wkleja spacje na końcach linii (jeśli są podświetlone.)
włosie konia
17

Znalazłem lepszy sposób na ten post . Możesz utworzyć alias tmux, do tmux -2którego zmusi tmux do przyjęcia, że ​​powłoka używa 256-kolorowego terminala.

Boogy
źródło
4

Właśnie to działało dla mnie w #Ubuntu i #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

Załaduj ponownie ustawienia:

$ source ~ / .bashrc # Ubuntu

$ source ~ / .bash_profile # Mac

Skonfiguruj plik .bashrc dla komputerów Mac (tak jak jest używany przez Tmux)

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

Ustaw opcję „default-terminal” w ~ / .tmux.conf.

# File: ~/.tmux.conf
set -g default-terminal "screen-256color"  # Mac and Ubuntu
Munish
źródło
1

Szybką poprawką jest uruchomienie następujących czynności w terminalu.

export TERM=xterm-color

Możesz dodać go do swojego ~/.bash_profilelub innego profilu, aby zawsze był ustawiony na starcie.

Peter Dietz
źródło
Dzięki! To wszystko, co musiałem dodać do mojego, .zshrcaby tryb wizualny był rzeczywiście widoczny.
danmcardle
1

Miałem bardzo podobny problem dla gnome-terminal + tmux + vim, ale został rozszerzony również na konkretny problem kombinacji klawiszy:. Musiałem połączyć kilka rzeczy razem. po pierwsze musiałem skonfigurować mój plik .tmux.conf w:

# 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

Następnie w .vimrc:

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

I to wystarczyło dla klawiszy i tła.

P4C
źródło
1

Jeśli nadal masz problemy: zauważyłem, że vim wraca do używania opcji t_Co=8wewnątrz tmux, nawet jeśli $TERMjest ustawiony na screen-256color. Moim obejściem jest ten fragment kodu w vimrc:

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

$TMUXZmiennej jest wypełnione tylko wtedy, gdy w środku sesji tmux. W tym przypadku zezwalam vimowi na użycie 256 kolorów. Zauważ, że rozbrajam również termguicolors, ponieważ tmux nie obsługuje prawdziwych kolorów.

lgalke
źródło
0

Właśnie teraz stanął przed tym samym problemem. Na podstawie odpowiedzi Bloya i aktualnej zawartości mojego ~ / .profile (w rzeczywistości jest to to samo, co winchendonsprings ') rozwiązałem mój problem w następujący sposób:

~/.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

Logika jest prosta: jeśli nie jesteśmy w sesji tmux, użyj xterm (kolorowe lub nie). W przeciwnym razie to samo dotyczy ekranu.

Może to zbyt gadatliwe, ale masz pomysł.

evilguc
źródło