it-swarm.com.de

Warum sehen Vim-Farben innerhalb und außerhalb von tmux unterschiedlich aus?

Umgebung:

  • Fedora 25 (4.9.12-200.fc25.x86_64)
  • GNOME Terminal 3.22.1 Verwenden von VTE Version 0.46.1 + GNUTLS
  • VIM - Vi IMproved 8.0 (12. September 2016, zusammengestellt am 22. Februar 2017, 16:26:11 Uhr)
  • tmux 2.2

Ich habe kürzlich angefangen, tmux zu verwenden und habe festgestellt, dass sich die Farben in Vim ändern, je nachdem, ob ich innerhalb oder außerhalb von tmux arbeite. Unten sehen Sie Screenshots von Vim außerhalb (links) und innerhalb (rechts) von tmux beim Anzeigen eines Git-Diff:

(enter image description here

Meine TERM Variable ist

  • Außerhalb von tmux: xterm-256color
  • Innerhalb von tmux: screen-256color

Vim meldet diese Terminaltypen wie erwartet (über :set term?):

  • Außerhalb von tmux: term=xterm-256color
  • Innerhalb von tmux: term=screen-256color

Vim meldet außerdem, dass beide Instanzen im 256-Farben-Modus ausgeführt werden (über :set t_Co?):

  • Außerhalb von tmux: t_Co=256
  • Innerhalb von tmux: t_Co=256

Es gibt viele ähnliche Fragen bezüglich der Ausführung von Vim im 256-Farben-Modus in tmux (die beste Antwort, die ich gefunden habe, ist hier ), aber ich denke nicht, dass dies angesichts der obigen Informationen mein Problem ist.

Ich kann das Problem außerhalb von tmux duplizieren, wenn ich Vim mit dem Terminaltyp screen-256color Ausführe:

$ TERM=screen-256color vim

Das lässt mich glauben, dass es einfach einen Unterschied zwischen den Terminalfunktionen xterm-256color Und screen-256color Gibt, der den Farbunterschied verursacht. Was zu der im Titel gestellten Frage führt: Was genau in den Terminalfunktionen bewirkt, dass die Vim-Farben unterschiedlich sind? Ich sehe die Unterschiede zwischen :set termcap Innerhalb und außerhalb von tmux, aber ich bin gespannt, welche Variablen tatsächlich den Unterschied im Verhalten verursachen.

Unabhängig von der vorherigen Frage ist es möglich, dass die Vim-Farben konsistent sind, wenn sie innerhalb oder außerhalb von tmux ausgeführt werden? Einige Dinge, die ich versucht habe, sind:

  • Explizites Setzen des Standardterminals, das tmux in ~/.tmux.conf Verwendet, auf verschiedene Werte (einige gegen den Rat des tmux FAQ ):
 setze -g Standard-Terminal "screen-256color" 
 setze -g Standard-Terminal "xterm-256color" 
 setze -g Standard-Terminal "screen.xterm-256color" 
 setze -g Standard-Terminal "tmux-256color" 
  • Starten von tmux mit tmux -2.

In allen Fällen zeigte Vim innerhalb von tmux weiterhin verschiedene Farben an.

36

tmux unterstützt nicht die Terminfo-Funktion bce (Löschen der hinteren Farbe), die vim prüft auf, um zu entscheiden, ob das "Standardfarb" -Schema verwendet werden soll.

Dieses Merkmal von tmux wurde einige Male erwähnt -

18
Thomas Dickey

Ich hatte das ähnliche Problem schon einmal. Kommentare in Blau in Vim waren schwer zu lesen. Im .tmux.conf Ich setze dies:

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

Und in .vimrc:

set background=dark

Jetzt sieht es wie folgt aus und funktioniert sowohl in Gnome Terminal als auch in Cygwin: enter image description here

21
Vitalii Plagov

Dank der Analyse von @ egmont, welche Farben Vim bei TERM=screen-256color Ausgab, wurde ich inspiriert, das Farbschema zu betrachten, das Vim in den beiden Szenarien verwendet.

Vim berichtet, dass es in beiden Fällen das Farbschema default verwendet. Ich fand das seltsam, weil das Farbschema default unter Fedora 25 (/usr/share/vim/vim80/colors/default.vim) Nicht mit den Farben übereinstimmt, die ich tatsächlich sehe, wenn TERM=xterm-256color. Wenn ich das Farbschema explizit mit :colorscheme default Festlege, wenn TERM=xterm-256color, Ändert sich das Erscheinungsbild von Vim zu dem, wenn TERM=screen-256color. Um die Farben wieder auf das zu bringen, was sie waren, als ich Vim zum ersten Mal startete, musste ich das Farbschema ron verwenden. Fortschritt!

Ich habe ein Ask Ubuntu Antwort gefunden, das darauf hindeutet, dass Vim, wenn es das Farbschema default verwendet, nicht unbedingt default.vim Bedeutet, sondern themenspezifisch Farbschema. Wie die Antwort zeigt, entspricht ein dunkles Thema (das ich verwende) dem Farbschema ron, wie ich oben entdeckt habe. (Obwohl sich dieser Beitrag auf Ubuntu bezieht, gehe ich davon aus, dass das OP GNOME verwendet hat.)

Ich habe auch eine andere Frage gefunden, die das gleiche Problem zu beschreiben scheint, das ich habe. Ich bin beim Suchen darauf gestoßen, bevor ich diese Frage gestellt habe, aber aus irgendeinem Grund hat mich das Farbschema nicht als relevant empfunden.

Am Ende habe ich das getan, was @LapshinDmitry in seiner Antwort getan hat, und explizit colorscheme ron In meine ~/.vimrc - Datei gesetzt. Unabhängig davon, ob ich Vim innerhalb oder außerhalb von tmux starte, erscheinen die Farben gleich. Der einzige Nachteil ist, dass Vim nicht automatisch zum "Standard" -Farbschema für helle Themen wechselt, das anscheinend peachpuff ist, wenn ich mein Desktop-Thema jemals von einem dunklen zu einem hellen Geschmack ändere. Damit kann ich leben, da ich mein Thema wahrscheinlich nie ändern werde.

Ich werde diese Antwort nicht akzeptieren, da ich das explizite Festlegen des Farbschemas in meinem ~/.vimrc Als Problemumgehung und nicht als Lösung betrachte. Wenn jemand erklären kann, warum Vim abhängig vom Wert von TERM ein anderes "Standard" -Farbschema lädt, werde ich diese Antwort gerne akzeptieren, da ich mehr daran interessiert bin, die Grundursache zu verstehen. Ich vermute, es hat etwas damit zu tun, wie Vim die Terminalfunktionen zwischen den beiden Terminfo-Dateien interpretiert.

2

Meine TERM-Variable lautet Outside tmux: xterm-256color Inside tmux: screen-256color

Das ist richtig und funktioniert für mich. Versuchen Sie es mit einem anderen Terminal (ich verwende urxvt), um festzustellen, ob das Gnome-Terminal das Problem ist. Wenn Sie

Überprüfen Sie auch COLORTERM (meins ist auf rxvt gesetzt) ​​und unset TERMCAP.

0
laktak

Zu meiner eigenen Referenz später, wenn ich diese Einrichtung zweifellos google, um meinen nächsten Computer einzurichten.

  • Vim8/Neovim
  • Windows 10
  • Git Bash
  • Tmux 2.7

Verwenden Sie diese Anweisungen, um die erforderlichen Binärdateien und DLLs in Git bashs PATH zu übernehmen:

https://blog.pjsen.eu/?p=44

Verwenden Sie diese Befehle zum Konfigurieren von:

echo 'set -g default-terminal "screen.xterm-256color"' > ~/.tmux.conf
tmux -2u
0
Josh Peak