Unterstützung für 256 Farben für vim Hintergrund in tmux


98

bei der verwendung von vim in tmux kann ich feststellen, dass die 256-farbunterstützung aktiviert ist. mit $ tput Farben

Wenn Sie jedoch das Farbschema in vim in tmux ändern, wird das Farbschema zeilenweise geändert, nicht jedoch der gesamte Hintergrund. siehe ScreenshotBildbeschreibung hier eingeben

Hier ist zum Beispiel ein Ausschnitt aus meiner .vimrc-Datei. Mein ursprüngliches Farbschema ist dunkel solarisiert und dann nach dem Ausführen: Farbschema molokai sehen Sie, was passiert.

die Info

  • gnome-terminal
  • bash

in meiner ~ / .tmux.conf

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

in meinem ~ / .vimrc

    set t_Co=256

in meinem ~ / .bashrc

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

in meinem ~ / .profile

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

Irgendwelche Ideen, wie ich eine vollständige Farbänderung in vim bekommen kann? Sehen alle meine Schnipsel aus den Dateien gut aus?


Was passiert, wenn Sie im normalen Modus Strg-l drücken oder den Befehl ": redraw" ausführen?
Heptite

@Heptite nichts passiert noch die Farbänderung ist pro Zeile wie im Screenshot
Winchendonsprings

Antworten:


75

Nach dem Aussehen Ihres .bashrc und .profile überschreiben die Shells in tmux die 'default-terminal'-Einstellung in Ihrer tmux conf. Etwas wie das:

  • tmux erstellt eine neue Shell mit TERM=screen-256color
  • .bashrc / .profile ausführen, einstellen TERM=xterm-256color
  • vim läuft und versucht, einen falschen TERM für tmux zu verwenden

Sie können dies überprüfen, indem Sie ausführen

echo $TERM

in einer frischen tmux-schale.

Tmux ist relativ pingelig, wenn es darum geht, ein Terminal richtig einzustellen. Wenn Sie können, legen Sie den Begriffswert in der Konfiguration von gnome-terminal fest, nicht in Ihrer .bashrc-Datei. Wenn dies nicht der Fall ist, setzen Sie diese Einstellungen mit einem Häkchen bei "screen" oder "screen-256color" TERM und setzen Sie sie in diesem Fall nicht zurück.

Tmux möchte das Terminal WIRKLICH auf screenoder setzenscreen-256color


5
Nun, du hast es behoben. Ich habe in meinen .bashrc- und .profile-Dateien einfach alles auskommentiert, was mit dem Festlegen der Farbe auf 256 zu tun hatte. Neu gestartetes tmux und vim funktionieren mit dem richtigen Hintergrund und 256 aktivierten Farben. Kannst du mir sagen, wo sich die Konfigurationsdatei für das Gnome-Terminal befindet? Auch wenn Sie sagen, tmux möchte, dass das Terminal auf 'scfeen-256color' eingestellt wird, meinen Sie, dass ich es in meiner tmux.conf habe? Thanks
winchendonsprings

Ich habe keine Maschine mit Gnome-Terminal zur Hand, aber die Einstellung sollte irgendwo in der GUI sein, wahrscheinlich unter "Profileinstellungen" oder so ähnlich.
Bloy

5
Ja, lass tmux auch seine eigene Sache mit den Shells machen, die es erzeugt. Lasse die set -g default-terminal "screen-256color"Leitung in deiner tmux conf.
Bloy

2
Alles, was ich vorhatte, war das, wonach ich gesucht habe (wobei ich darauf geachtet habe, dass TERM in tmux richtig eingestellt und nicht überschrieben wurde), und DANN musste ich 'tmux -2' verwenden, um tmux zu laden.
Phantomwal

Versuchen Sie if [[ $TERM == xterm ]]; then TERM=xterm-256color; fi, es hat bei mir funktioniert.
asymmetrische

59

Deaktivieren Sie, wie hier erläutert , das Löschen der Hintergrundfarbe ( Background Color Erase, BCE), indem Sie die t_utTerminal-Option deaktivieren ( :set t_ut=in Vim ausführen und dann Control+ drücken L, um die Anzeige des Terminals zu aktualisieren), damit die Farbschemata ordnungsgemäß funktionieren, wenn Vim im tmux- und GNU-Bildschirm verwendet wird.


7
Dies ist das einzige, was endlich für mich funktioniert hat!
Oz123

3
set t_ut=Am Ende habe ich mein vimrc hinzugefügt , wodurch die manuelle Verwendung des Befehls entfällt und die Verwendung von <kbd> Control </ kbd> + <kbd> L </ kbd> nicht erforderlich ist, da die Sitzung mit deaktiviertem BCE beginnt.
Erran

Dies ist wichtig bei der Verwendung von PuTTY. Alle TERM-Kombinationen sind zu kurz, wenn das Farbschema einen Hintergrund hat. Tolle Ergänzung zum Thread.
Botimer

Dies funktioniert jedoch , wenn diese Lösung angewandt wird , das Kopieren und Einfügen mit der Maus auch Kopien und fügt die Räume hinteren Linien (wenn sie markiert sind.)
Pferdehaar

17

Ich habe in diesem Beitrag einen besseren Weg gefunden . Sie können einen Alias ​​für tmux erstellen, bei tmux -2dem tmux davon ausgeht, dass die Shell ein 256-Farben-Terminal verwendet.


4

Das hat bei mir in #Ubuntu und #Mac funktioniert:

# 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

Einstellungen neu laden:

$ source ~ / .bashrc # Ubuntu

$ source ~ / .bash_profile # Mac

Richten Sie .bashrc für Mac ein (wie es von tmux verwendet wird)

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

Richten Sie in ~ / .tmux.conf die Option "default-terminal" ein.

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

1

Eine schnelle Lösung besteht darin, Folgendes im Terminal auszuführen.

export TERM=xterm-color

Sie können es zu Ihrem ~/.bash_profileoder einem anderen Profil hinzufügen, um es beim Start immer festzulegen.


Vielen Dank! Dies war alles, was ich zu meinem hinzufügen musste, .zshrcum den visuellen Modus tatsächlich sichtbar zu machen.
danmcardle

1

Ich hatte ein sehr ähnliches Problem mit gnome-terminal + tmux + vim, aber es wurde auch auf bestimmte Tastenkombinationen erweitert:. Ich musste ein paar Dinge miteinander kombinieren. zuerst musste ich meine .tmux.conf einrichten in:

# 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

Dann in .vimrc:

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

Und das hat den Job für die Tasten und den Hintergrund erledigt.


1

Wenn Sie immer noch auf Probleme t_Co=8stoßen : Ich habe festgestellt, dass vim auf die Verwendung der Option in tmux zurückgreift, auch wenn auf gesetzt $TERMist screen-256color. Mein Workaround ist dieses Snippet in vimrc:

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

Die $TMUXVariable wird nur in einer tmux-Sitzung gefüllt. In diesem Fall erlaube ich vim, 256 Farben zu verwenden. Beachten Sie, dass ich auch termguicolors deaktiviert habe, da tmux keine True Colors unterstützt.


0

Gerade jetzt stand das gleiche Problem. Basierend auf der Antwort von bloy und dem aktuellen Inhalt meines ~ / .profile (tatsächlich ist es dasselbe wie bei winchendonsprings ) habe ich mein Problem wie folgt gelöst:

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

Die Logik ist einfach: Wenn wir nicht in der tmux-Sitzung sind, verwenden Sie xterm (farbig oder nicht). Ansonsten das gleiche für Bildschirm.

Vielleicht ist es zu ausführlich, aber Sie haben die Idee.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.