stracić vim colorscheme w trybie tmux


228

Korzystam z iterm2 i kiedy jestem w trybie tmux, kolory, które ustawiłem w vimie, nie są wyświetlane. Tylko schemat kolorów ustawiłem w iterm. Jeśli uruchomię vima z powłoki, schemat kolorów wydaje się prawidłowy - tylko wtedy, gdy jestem w trybie tmux.

Próbowałem ustawienia :colorscheme molokaiw vimie (patrz zrzut ekranu poniżej) i to się nie zmienia - znowu domyślny schemat kolorów dla iterm2 pozostaje.

Czy brakuje jakiegoś ustawienia iterm lub tmux.conf? Moje kropki są tutaj na githubie.


31
Co się stanie, kiedy to zrobisz $ tmux -2?
romainl

4
To było wszystko. Co to jest flaga -2?
tristen

11
Zmusza tmux do pracy z 256 kolorami.
romainl

Odpowiedzi:


252

Miałem ten sam problem. Jedyną różnicą było to używam solarizeraczej wtedy molokai.

Aby rozwiązać problem, skonfigurowałem alias w ~/.bashrc:

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

I ustaw default-terminalopcję w ~/.tmux.conf:

set -g default-terminal "xterm"

Na koniec, $ source ~/.bashrcaby załadować nowy alias.


20
Używam tego zamiast, tmux -2ponieważ jest to bardziej szczegółowe.
thameera

97
Osobiście musiałem używać set -g default-terminal "screen-256color"do pracy, a nie xtermna OS X, włożony do pudełka Ubuntu. Odniosłem się
waffl

7
Alias ​​tutaj nie ma sensu: udaje, że tmux działa wewnątrz ekranu lub tmux, co rzadko się zdarza. Aby powiedzieć tmuxowi, aby założył, że terminal, w którym działa, obsługuje 256 kolorów, uruchom tmux -2lub tmux -2 attach(tmux decyduje za każdym razem , gdy dołączasz nową lub istniejącą sesję do terminala). Byłby rozsądnym pseudonimem alias tmux='tmux -2'. Zobacz także obsługę tmux, TERM i 256 kolorów
Gilles 'SO- przestań być zły'

3
Przeczytałem w innej odpowiedzi (nie mogłem znaleźć odniesienia), że wymuszanie TERM nie było dobrą praktyką, choć nie jestem tego pewien. Ponieważ tmux -2opcja set -g default-terminal "screen-256color"dla mnie zadziałała, to będzie mój wybór. Ale i tak dzięki!
marcelocra

5
Jeśli .tmux.confustawienie nie działa, zamknij wszystkie procesy tmux i uruchom ponownie. Możesz to zrobić set -g default-terminal "screen-256color"bez ustawiania żadnego aliasu .bashrc. Myślę, że ludzie robią obejścia takie jak alias zmiennej środowiskowej, ponieważ nie zamykają wszystkich procesów tmux po skonfigurowaniu .tmux.conf.
Chev

74

Jak wspomniano powyżej @romainl, musiałem zmusić tmux do użycia 256 kolorów przez dodanie -2flagi:

$ tmux -2

Dodałem alias tmux='tmux -2'do mojego bash_profile, więc nie zapomnę :)


Właściwie to wcale nie jest obowiązkowe: nie używam, -2ale mam 256 kolorów pracujących w Vimie w tmuxie.
romainl

@romainl Jest to konieczne, jeśli tmux nie wykryje, że twój terminal ma 256 kolorów, co jest dość powszechne.
Gilles 'SO - przestań być zły'

1
@Gilles, Vim nie wykrywa, że ​​terminal obsługuje 256 kolorów, ponieważ domyślną wartością TERMjest tmux screen. -2nie zmienia się TERMi nie zmienia niczego związanego z kolorem tego, jakie informacje Vim otrzymuje ze swojego środowiska: :echo &t_Cowciąż wraca 8. Dzięki podanym informacjom Vim robi dobrze. Jedyne rzeczy, które muszą być ustawione są 1. terminal emulatora TERMdo xterm-256colorlub równoważną wartość jak urxvt-unicode-256colori domyślnej 2. tmux jest TERMz set -g default-terminal "screen-256color".
romainl

@romainl Większość środowisk TERMustawia się na xterm, xterm-256colora więc nie na potrzebę uruchamiania tmux -2(lub TERM=xterm-256color tmux, lub zmiany termcap lub innych sposobów osiągnięcia tego samego).
Gilles 'SO - przestań być zły'

1
@Gilles, problem polega na tym, że -2 nie osiąga niczego, co ma jakikolwiek wpływ na zachowanie Vima w zakresie obsługi 256 kolorów, ponieważ jedyną rzeczą, która ma znaczenie dla Vima, jest TERM i to, które należy ustawić na końcu łańcucha: w twoim emulator terminala. Jeśli przełączysz SSH przez 5 hostów, a twój terminal jest ustawiony poprawnie, Vim uruchomiony na 5 hostach zobaczy TERMINĘ 256 kolorów i podejmie odpowiednie działania. Jeśli użyjesz tmux w dowolnym punkcie łańcucha -2, będzie miało zerowy wpływ na zachowanie Vima, ponieważ widzi tylko, że jego środowisko jest ograniczone do 8 kolorów z powodu domyślnego TERMINU tmux: ekran, -2 lub nie.
romainl

72

Wypróbowałem wszystkie powyższe rozwiązania i to, co w końcu zadziałało, to wstawienie następujących wierszy .tmux.conf:

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

Używam tmux przez SSH i to też działało dla mnie, mimo że nie używam xterm, tylko zwykłe SSH.
armen.shimoon

Nie używałem go przez ssh i to była jedyna odpowiedź, która działała dla mnie. Lokalna sesja iTerm w OSX 10.9.5.
Chev

To działa dla mnie (MacOS Mojave + iTerm2 / Alacritty), dzięki
Adrian Magdas

31

Właśnie odkryłem, dlaczego mam wiele zamieszania. Podobnie jak inni tutaj, miałem trudności z uruchomieniem domyślnego ustawienia terminala. Przypomniałem sobie, że miałem sesję tmux w tle. Ponownie przyłączyłem moją sesję, zamknąłem moje procesy i zamknąłem WSZYSTKIE procesy tmux. Następnym razem, gdy ponownie uruchomiłem tmux, zaczęło obowiązywać domyślne ustawienie terminala .tmux.conf. Nie wiem, czy robią to inni, ale zalecam zamknięcie wszystkich procesów tmux przed zmodyfikowaniem .tmux.confpliku.

Mam konfigurację do pracy na moim komputerze lokalnym (OSX 10.9.5 z iTerm2) bez żadnych modyfikacji w .bashrclub .bash_profile. Ja tylko dodać linię set -g default-terminal "xterm-256color"do ~/.tmux.confi ponownie uruchomić wszystkie procesy tmux.

Mam zdalną konfigurację (ssh do Ubuntu 14.04), aby działała dokładnie tak samo, bez żadnych modyfikacji .bashrc. Po prostu dodałem set -g default-terminal "xterm-256color"do ~/.tmux.confmojego zdalnego komputera i zrestartowałem wszystkie zdalne procesy tmux.

Możesz sprawdzić, co widzi Vim, robiąc echo $TERMz sesji tmux. To powtarzał screenjako wartość aż wznowiona wszystkie procesy tmux, w którym momencie to odzwierciedlenie xterm-256colorzgodnie z oczekiwaniami.

Mam nadzieję, że to pomaga.


1
Potwierdziłem w kilku innych systemach operacyjnych od tego postu, zamknięcie wszystkich procesów i ustawienie tej default-terminalopcji .tmux.confdziałało do tej pory w 100%.
Chev

2
Ja też! spędziłbym na tym mniej czasu, gdyby ta odpowiedź była dalej.
Sigfried

21

Jest to nieco przestarzałe, ale warto wspomnieć, że używanie ekranu często psuje klawisze Home i End. Za pomocą

export TERM="xterm-256color"

powinien zachować ich funkcjonalność i pozwolić, aby schemat kolorów (lub powerline) działał dobrze.


Dzięki za zwrócenie na to uwagi. Nie wiedziałem tego Wydaje się, że nadal działa dla Deriana derv z tego, co widziałem do tej pory. W mojej obronie stanowisko dotyczyło OSX.
Jpatrick,

tmux 1.9a, OSX 10.9.2, iTerm2 Build 1.0.0.20130622 eksport TERM = "xterm-256color" w .bash_profile, a następnie ustaw iterm na xterm-256-color działał dla mnie. Nie trzeba ustawiać żadnej konfiguracji tmux.
agenteo

14

Potrzebowałem vima do prawidłowego wyświetlania z tmuxem w terminalu na Ubuntu i cygwin / mintty na Windowsie. Udało mi się to dzięki połączeniu takich odpowiedzi.

W .bashrc:

alias tmux="tmux -2"

W .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

na podstawie odpowiedzi z tego pytania, tej strony wiki Vima i tego pytania kursora blokowego


Miałem problem z mintty i dodanie konfiguracji vima naprawiło to dla mnie. Nie musiałem nawet robić tmuxaliasu.
trigoman

@trigoman, to samo dla mnie, po prostu musiałem zaktualizować .vimrc.
Masood Alam

Wypróbowałem wszystkie poprzednie sugestie. Właśnie dodano set t_Co=256do .vimrc i zostało to naprawione. Nie musiałem tworzyć tmuxaliasu.
Mike

11

Wypróbowałem wszystkie powyższe instrukcje i odkryłem, że najważniejsze jest to, że muszę jawnie dodać następujący wiersz w moim pliku .bashrc.

export TERM=screen-256color

Nie wiem, dlaczego alias tmux = "TERM = screen-256color-bce tmux" nie działa. Używam Sierra 10.12.1.


To działało dla mnie. Po prostu eksport TERM. +1
markovchain

10

Jeśli ktoś potrzebuje 24-bitowej obsługi kolorów:

Tmux obsługuje 24-bitowe kolory od wersji 2.2. Jeśli terminal obsługuje kolory 24-bitowe, dodaj terminal do ustawienia zastępowania terminala. Na przykład,

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

Moja lista kontrolna środowiska:

  • macOS Sierra 10.12.3
  • iTerm2 3.0.14 (Zgłoś, że typ terminala to xterm-256color)
  • neovim 0.1.7 (Włącz kolor 24-bitowy, dodając: xterm-256colordo .vimrc)
  • tmux 2.3 (Dodaj set -ga terminal-overrides ",xterm-256color:Tc"do .tmux.conf)

Nic więcej nie muszę dodawać .bashrcani .zshrc.

Mam nadzieję, że to może pomóc.


jedyna rzecz, która działała dla mnie. co to dokładnie robi?
volk

6

Ponieważ jest to pierwszy wynik w Google i ponieważ żadne z powyższych nie pomogło .. nie chciałem tego opublikować, aby ktoś mógł uznać to za pomocne

w .vimrc:

set background=dark
set t_Co=256

HTH


Przetestowałem te dwie linie i działają dobrze dla mojego Vima na WSL-Windows10.
llinfeng

1
Wielkie dzięki. To działało na Ubuntu 18 z terminalem gnome
Roymunson,

4

Dodanie następującego wiersza w pliku .tmux.conf działało dla mnie w systemie macOS Sierra 10.12.6,

ustaw -g domyślny terminal „screen-256color”


To samo tutaj. Dziękujemy @waffl za znalezienie tego rozwiązania!
Adam Erickson,

3

Jeśli znajdziesz się w tym samym miejscu co ja, że ​​żadne z powyższych nie działało .. spróbuj tego:

w .tmux.conf:

set -g default-terminal "xterm"

w konfiguracji bash (może .bashrclub .bash_profile):

alias tmux="tmux -2"

a następnie uruchom:

killall tmux

a następnie uruchom ponownie Tmux


3

Jeśli używasz tmuxinatorlub mux, musisz dodać je do .bashrclub .zshrc:

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

Wymusza to użycie 256 kolorów w terminalu.

Następnie tmux, tmuxinatora muxkomenda będzie wszystkie prace.



2

Musiałem tylko poradzić sobie z tym problemem i chociaż wszystkie wcześniej opublikowane odpowiedzi były pomocne, nie rozwiązały problemu w moim przypadku.

Mój problem został rozwiązany przez usunięcie następującego wiersza z mojego .vimrc:

set termguicolors

która zresztą była zresztą zresztą inna instrukcja.

Teraz z następującą linią znajdującą się w poprzednich odpowiedziach w moim .tmux.conf:

export TERM="screen-256color"

wszystko jest ładne i kolorowe.


2

Usunąłem linię set termguicolors, ale to nie działa. Ustawienie set notermguicolorszamiast tego w .vimrcpracach.


1

Ze strony podręcznika tmux, dodając flagę w następujący sposób:

tmux -2

Ta -2flaga zmusza tmux do działania w trybie 256 kolorów.

To działa dla mnie


1

Nie miałem szczęścia próbując wyeksportować inny TERMlub ustawić domyślny terminal w moim .tmux.conf.

Moim rozwiązaniem do naprawy kolorów vim w tmux było dodanie tej linii do .tmux.conf:

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

Nie jestem pewien, dlaczego to zastąpienie było potrzebne, biorąc pod uwagę, że ja TERM=xtermi ja ustawiliśmy iTerm na xterm, ale wydaje się, że działa.


0

Używam Ubuntu bionic 18.04.4 LTS i tmux 2.6. Mam ten sam problem i można go rozwiązać, po prostu dodając go do .bashrc

export TERM=screen-256color

I oczywiście nie zapomnij go zdobyć. source ~/.bashrc

Lub po prostu uruchom ponownie teminal

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.