Verliere das Vim-Farbschema im tmux-Modus

228

Ich verwende iterm2 und wenn ich mich im tmux-Modus befinde, wird das in vim festgelegte Farbschema nicht angezeigt. Nur das Farbschema, das ich in iterm eingestellt habe. Wenn ich vim von der Shell aus starte, erscheint das Farbschema korrekt - nur wenn ich mich im tmux-Modus befinde.

Ich habe versucht, :colorscheme molokaiin vim zu setzen (siehe Abbildung unten) und es ändert sich nicht - wieder bleibt das Standardfarbschema für iterm2 erhalten.

Fehlt mir eine Einstellung für iterm oder tmux.conf? Meine Dotfles sind hier oben auf Github.

tristen
quelle
31
Was passiert, wenn du es tust $ tmux -2?
Romainl
4
Das war es total. Was ist die -2 Flagge?
Tristen
11
Es zwingt tmux, mit 256 Farben zu arbeiten.
Romainl

Antworten:

251

Ich hatte das gleiche Problem. Der einzige Unterschied war, dass ich solarizedann eher benutze molokai.

Um das Problem zu beheben, habe ich einen Alias ​​eingerichtet in ~/.bashrc:

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

Und richten Sie die default-terminalOption ein in ~/.tmux.conf:

set -g default-terminal "xterm"

Zuletzt müssen Sie $ source ~/.bashrceinen neuen Alias ​​laden.

Seyeong Jeong
quelle
20
Ich benutze dies anstelle von, tmux -2da dies ausführlicher ist.
Thameera
97
Persönlich musste ich set -g default-terminal "screen-256color"eher arbeiten als xtermunter OS X, sshed in eine Ubuntu-Box. Ich habe auf diese Seite verwiesen
waffl
7
Der Alias ​​hier macht keinen Sinn: Er gibt tmux vor, dass er im Bildschirm oder tmux ausgeführt wird, was kaum jemals der Fall ist. Um tmux anzuweisen, anzunehmen, dass das Terminal, in dem es ausgeführt wird, 256 Farben unterstützt, führen Sie tmux -2oder aus tmux -2 attach(tmux entscheidet jedes Mal, wenn Sie eine neue oder vorhandene Sitzung an ein Terminal anhängen). Ein vernünftiger Alias ​​wäre alias tmux='tmux -2'. Siehe auch Unterstützung für tmux, TERM und 256 Farben
Gilles 'SO - hör auf böse zu sein'
3
Ich habe in einer anderen Antwort gelesen (konnte die Referenz nicht finden), dass es keine gute Praxis war, den BEGRIFF zu erzwingen, obwohl ich es nicht genau weiß. Da die tmux -2Option mit dem set -g default-terminal "screen-256color"für mich funktioniert hat, wird das meine Wahl sein. Danke trotzdem!
Marcelocra
5
Wenn die .tmux.confEinstellung nicht wirksam zu werden scheint, schließen Sie alle tmux-Prozesse und starten Sie sie neu. Sie können einfach darauf set -g default-terminal "screen-256color"verzichten, einen Alias ​​festzulegen .bashrc. Ich denke, die Leute führen Problemumgehungen wie den Alias ​​für Umgebungsvariablen durch, weil sie nach der Konfiguration nicht alle tmux-Prozesse schließen .tmux.conf.
Chev
74

Wie oben von @romainl erwähnt, musste ich tmux zwingen, 256 Farben zu verwenden, indem ich das -2Flag hinzufügte :

$ tmux -2

Ich alias tmux='tmux -2'habe meinem bash_profile hinzugefügt , also vergesse ich nicht :)

tristen
quelle
Eigentlich ist es überhaupt nicht obligatorisch: Ich benutze es nicht, -2aber ich habe 256 Farben, die in Vim in tmux arbeiten.
Romainl
@romainl Es ist notwendig, wenn tmux Ihr Terminal nicht mit 256 Farben erkennt, was ziemlich häufig vorkommt.
Gilles 'SO - hör auf böse zu sein'
1
@ Gilles, Vim erkennt nicht, dass das Terminal 256 Farben unterstützt, da die Standardeinstellung von tmux TERMist screen. -2ändert sich nicht TERMund ändert nichts Farbbezogenes an den Informationen, die Vim aus seiner Umgebung erhält: :echo &t_Cokehrt immer noch zurück 8. Mit den Informationen, die es gibt, macht Vim das Richtige. Die einzigen Dinge, die eingestellt werden müssen, sind 1. Ihr Terminalemulator TERMauf xterm-256coloroder ein gleichwertiger Wert wie urxvt-unicode-256colorund 2. der Standardwert von tmux TERMmit set -g default-terminal "screen-256color".
Romainl
@romainl Die meisten Umgebungen haben sich darauf TERMeingestellt xterm, nicht xterm-256color, daher muss ausgeführt werden tmux -2(oder TERM=xterm-256color tmuxdie Termkappe oder andere Methoden, um dasselbe zu erreichen).
Gilles 'SO - hör auf böse zu sein'
1
@ Gilles, das Problem ist, dass -2 nichts bewirkt, was sich auf das Verhalten von Vim in Bezug auf die Unterstützung von 256 Farben auswirkt, da das einzige, was für Vim wichtig ist, Ihr BEGRIFF ist und an Ihrem Ende der Kette festgelegt werden muss: in Ihrem Terminal-Emulator. Wenn Sie über 5 Hosts SSH-fähig sind und Ihr Terminal richtig eingestellt ist, sieht Vim, das auf dem 5. Host gestartet wurde, Ihren 256-Farben-BEGRIFF und handelt entsprechend. Wenn Sie tmux an einem beliebigen Punkt der Kette verwenden, hat -2 keinen Einfluss auf das Verhalten von Vim, da nur die Umgebung auf 8 Farben beschränkt ist, da der Standard-TERM von tmux: screen, -2 oder nicht.
Romainl
72

Ich habe alle oben genannten Lösungen ausprobiert und was schließlich für mich funktioniert hat, sind die folgenden Zeilen .tmux.conf:

set -g default-terminal "xterm-256color"
ElefEnt
quelle
Ich benutze tmux via SSH und das hat auch bei mir funktioniert, obwohl ich nicht xterm benutze, sondern nur normales SSH.
armen.shimoon
Ich habe es nicht über ssh verwendet und dies war die einzige Antwort, die für mich funktioniert hat. Lokale iTerm-Sitzung in OSX 10.9.5.
Chev
Dies funktioniert für mich (MacOS Mojave + iTerm2 / Alacritty), danke
Adrian Magdas
31

Ich habe gerade herausgefunden, warum ich viel Verwirrung hatte. Wie andere hier hatte ich Schwierigkeiten, die Standardeinstellung für das Terminal in Kraft zu setzen. Ich erinnerte mich, dass ich im Hintergrund eine tmux-Sitzung hatte. Ich habe meine Sitzung erneut angehängt, meine Prozesse geschlossen und ALLE tmux-Prozesse geschlossen. Beim nächsten Neustart von tmux wurde die Standardeinstellung für das Terminal .tmux.confwirksam. Ich weiß nicht, ob dies auch andere tun, aber ich empfehle, alle tmux-Prozesse zu schließen, bevor Sie die .tmux.confDatei ändern .

Ich habe mein Setup so eingerichtet, dass es auf meinem lokalen Computer (OSX 10.9.5 mit iTerm2) funktioniert, ohne dass Änderungen an .bashrcoder vorgenommen wurden .bash_profile. Alles, was ich getan habe, war, die Zeile set -g default-terminal "xterm-256color"zu ~/.tmux.confallen tmux-Prozessen hinzuzufügen und neu zu starten.

Ich habe mein Remote-Setup (ssh zu Ubuntu 14.04) so ​​eingestellt, dass es ohne Änderungen genauso funktioniert .bashrc. Ich habe einfach hinzugefügt , set -g default-terminal "xterm-256color"um ~/.tmux.confauf meinem Remote - Rechner und alle Remote tmux Prozesse neu gestartet.

Sie können testen, was Vim sieht, indem Sie dies echo $TERMin einer tmux-Sitzung tun. Es wurde immer wieder screenals Wert angegeben, bis ich alle tmux-Prozesse neu startete. An diesem Punkt spiegelte es sich xterm-256colorwie erwartet wider .

Hoffentlich hilft das.

Chev
quelle
1
Ich habe seit diesem Beitrag auf mehreren weiteren Betriebssystemen bestätigt, dass das Schließen aller Prozesse und das Einstellen der default-terminalOption in .tmux.conf100% der Fälle bisher funktioniert hat.
Chev
2
ich auch! Ich hätte weniger Zeit damit verbracht, wenn diese Antwort weiter oben gewesen wäre.
Sigfried
21

Das ist also etwas veraltet, aber es könnte erwähnenswert sein, dass die Verwendung des Bildschirms häufig die Home- und End-Tasten beschädigt. Verwenden von

export TERM="xterm-256color"

in sollte die Funktionalität dieser beibehalten und ermöglichen, dass das Farbschema (oder die Stromleitung) einwandfrei funktioniert.

Jpatrick
quelle
Vielen Dank für den Hinweis. Das wusste ich nicht. Nach dem, was ich bisher gesehen habe, scheint es für Debian derv immer noch zu funktionieren. Zu meiner Verteidigung bezog sich der Beitrag auf OSX.
Jpatrick
tmux 1.9a, OSX 10.9.2, iTerm2 Build 1.0.0.20130622 exportieren Sie TERM = "xterm-256color" in .bash_profile und setzen Sie iterm auf xterm-256-color, das für mich funktioniert hat. Sie müssen keine tmux-Konfiguration festlegen.
Agenteo
14

Ich brauchte vim, um mit tmux im Terminal unter Ubuntu und cygwin / mintty unter Windows korrekt anzuzeigen. Ich habe es zum Laufen gebracht, indem ich die Antworten so kombiniert habe.

In .bashrc:

alias tmux="tmux -2"

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

basierend auf Antworten von dieser Frage, dieser Vim Wiki Seite und dieser Blockcursor-Frage

Andrew Johnston
quelle
Ich hatte das Problem mit mintty und das Hinzufügen der vim-Konfiguration hat es für mich behoben. Ich musste nicht einmal den tmuxAlias ​​machen.
Trigoman
@trigoman, das gleiche auch für mich, ich musste nur die .vimrc aktualisieren.
Masood Alam
Ich habe alle vorherigen Vorschläge ausprobiert. Gerade set t_Co=256zu .vimrc hinzugefügt und es wurde behoben. Ich musste keinen tmuxAlias erstellen .
Mike
11

Ich habe alle oben genannten Anweisungen ausprobiert und festgestellt, dass das Wichtigste darin besteht, dass ich die folgende Zeile explizit in meine .bashrc-Datei einfügen muss.

export TERM=screen-256color

Ich weiß nicht, warum der Alias ​​tmux = "TERM = screen-256color-bce tmux" nicht funktioniert. Ich benutze Sierra 10.12.1.

Löwe Lai
quelle
Das hat bei mir funktioniert. Einfacher Export von TERM. +1
Markovchain
10

Falls jemand eine 24-Bit-Farbunterstützung benötigt:

Tmux unterstützt ab Version 2.2 24-Bit-Farben. Wenn Ihr Terminal 24-Bit-Farben unterstützt, fügen Sie Ihr Terminal der Einstellung zum Überschreiben von Terminals hinzu. Beispielsweise,

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

Meine Umwelt-Checkliste:

  • macOS Sierra 10.12.3
  • iTerm2 3.0.14 (Typ des Berichtsterminals ist xterm-256color )
  • neovim 0.1.7 (Aktivieren Sie die 24-Bit-Farbe, indem Sie Folgendes hinzufügen: xterm-256colorto.vimrc )
  • tmux 2.3 (Hinzufügen set -ga terminal-overrides ",xterm-256color:Tc"zu .tmux.conf)

Nichts anderes muss ich hinzufügen .bashrcoder .zshrc.

Hoffe das könnte helfen.

Yanzhe Chen
quelle
einzige Sache, die für mich funktioniert hat. Was genau macht das?
Volk
6

Da dies das erste Ergebnis bei Google ist und keines der oben genannten Ergebnisse hilfreich war, wollte ich dies veröffentlichen, damit es jemand hilfreich findet

in .vimrc:

set background=dark
set t_Co=256

HTH

HK_
quelle
Habe diese beiden Zeilen getestet und sie funktionieren gut für mein Vim unter WSL-Windows10.
llinfeng
1
Vielen Dank. Dies funktionierte auf Ubuntu 18 mit Gnome-Terminal
Roymunson
4

Das Hinzufügen der folgenden Zeile in .tmux.conf funktionierte für mich mit macOS Sierra 10.12.6,

setze -g Standard-Terminal "screen-256color"

Zack Zhu
quelle
Hier gilt das gleiche. Vielen Dank an @waffl, dass Sie diese Lösung gefunden haben!
Adam Erickson
3

Wenn Sie sich in der gleichen Situation wie ich befinden, hat keiner der oben genannten Punkte funktioniert. Versuchen Sie Folgendes:

in .tmux.conf:

set -g default-terminal "xterm"

in bash config (vielleicht .bashrcoder .bash_profile):

alias tmux="tmux -2"

und dann ausführen:

killall tmux

und dann tmux neu starten

Eliasbagley
quelle
3

Wenn Sie tmuxinatoroder verwenden mux, müssen Sie diese in .bashrcoder hinzufügen .zshrc:

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

Diese erzwingen die Verwendung von 256 Farben im Terminal.

Dann tmux, tmuxinatorund muxBefehl werden alle arbeiten.

qingxp9
quelle
2

Um die richtige Farbe einzurichten und Rendering-Probleme sowohl unter Ubuntu als auch unter Mac zu beseitigen:

Überprüfen Sie dies

Munish
quelle
2

Musste mich nur mit diesem Problem befassen, und obwohl alle zuvor veröffentlichten Antworten hilfreich waren, haben sie das Problem in meinem Fall nicht gelöst.

Mein Problem wurde behoben, indem die folgende Zeile in meinem entfernt wurde .vimrc:

set termguicolors

was ohnehin mit einer anderen Anweisung überflüssig war.

Nun, mit der folgenden Zeile in früheren Antworten in meinem .tmux.conf:

export TERM="screen-256color"

Alles ist schön und bunt.

Nitlev
quelle
2

Ich habe die Leitung entfernt set termguicolors, aber es funktioniert nicht. Einstellung set notermguicolorsstattdessen in .vimrcArbeit.

Alextanhongpin
quelle
1

Fügen Sie auf der tmux-Manpage das folgende Flag hinzu:

tmux -2

Dies -2 Flag zwingt tmux, im 256-Farben-Modus zu laufen.

Das funktioniert bei mir

RyanLiu
quelle
1

Ich hatte nicht viel Glück beim Versuch, ein anderes zu exportieren TERModer das Standardterminal in meinem zu setzen.tmux.conf .

Meine Lösung zum Fixieren von Vim-Farben in tmux war das Hinzufügen dieser Zeile zu .tmux.conf:

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

Ich bin mir nicht sicher, warum diese Überschreibung erforderlich war, da ich TERM=xtermund ich iTerm ebenfalls auf xterm eingestellt haben, aber es scheint zu funktionieren.

Patrick Lewis
quelle
0

Ich benutze Ubuntu bionic 18.04.4 LTS und tmux 2.6. Ich habe das gleiche Problem und es kann behoben werden, indem Sie dies einfach in .bashrc hinzufügen

export TERM=screen-256color

Und natürlich vergessen Sie nicht, es zu beschaffen. source ~/.bashrc

Oder starten Sie einfach Ihr Teminal neu

Babang-Parhusip
quelle