Korrektur der Hervorhebung in tmux


18

Ich vermisse das Hervorheben (Reverse-Modus) auf der Konsole, seit ich urxvt + tmux als Hauptterminal verwende. Die Hervorhebungen wurden durch kursive Schrift ersetzt - was auf den ersten Blick ziemlich cool aussieht - aber ich kann das eine kursive Wort nicht in Tausenden von nicht kursiven Wörtern finden, wenn ich versuche, etwas in einer zu suchen less.

Dies funktioniert ordnungsgemäß, wenn der Terminaltyp auf ein xterm*Profil eingestellt ist (z . B. set -g default-terminal "xterm-color"in .tmux.conf ). Einige Verknüpfungen können jedoch nicht funktionieren. In diesem Fall können Apps die richtige Geometrie des Terminals nicht ermitteln.

Antworten:


11

Ich habe Informationen und Lösungen dazu auf den Seiten von tmux gefunden:

In der Terminfo-Beschreibung des Bildschirms fehlt der Kursiv-Modus, und an seiner Stelle befindet sich der Standout-Modus. Es wird jedoch dieselbe Escape-Sequenz verwendet, urxvtdie auch für Kursivdruck verwendet wird. Dies bedeutet, dass Anwendungen (wie vim), die nach Kursivschrift suchen, diese nicht finden und sich an ihrer Stelle möglicherweise umkehren, während Anwendungen (wie weniger), die nach Hervorhebungen fragen, Kursivschrift statt Umkehrung erhalten.

[Fix 1] Ersetze die terminfo-Einträge und erhalte + Kursivschrift

(pro Benutzer!)

Um Anwendungen beachten Sie, dass tmuxStützen Kursivschrift und eine richtige Escape - Sequenz für herausragende zu verwenden, müssen Sie eine neue erstellen term Datei mit modifizierten sgr, smso, rmso, sitmund ritmEinträge:

$ mkdir $HOME/.terminfo/
$ screen_terminfo="screen"
$ infocmp "$screen_terminfo" | sed \
  -e 's/^screen[^|]*|[^,]*,/screen-it|screen with italics support,/' \
  -e 's/%?%p1%t;3%/%?%p1%t;7%/' \
  -e 's/smso=[^,]*,/smso=\\E[7m,/' \
  -e 's/rmso=[^,]*,/rmso=\\E[27m,/' \
  -e '$s/$/ sitm=\\E[3m, ritm=\\E[23m,/' > /tmp/screen.terminfo
$ tic /tmp/screen.terminfo

Und sagen Sie tmux, dass es in ~ / .tmux.conf verwendet werden soll :

set -g default-terminal "screen-it"

Wenn Ihr Terminal 256 Farben unterstützt, verwenden Sie:

$ screen_terminfo="screen-256color"

anstelle von "Bildschirm". Weitere Informationen finden Sie im FAQ-Eintrag zur Unterstützung von 256 Farben. Beachten Sie auch, dass tmux auf Terminals, die Kursivschrift nicht unterstützen, weiterhin das umgekehrte Video anzeigt.

Wenn Sie urxvtKursivschrift überhaupt nicht anzeigen können, stellen Sie sicher, dass Sie eine kursivschriftfähige Schriftart aktiviert haben. Fügen Sie beispielsweise ~ / .Xdefaults hinzu :

urxvt.italicFont: xft:Bitstream Vera Sans Mono:italic:autohint=true

[Fix 2] Ersetzen Sie einfach kursive Steuerzeichen durch umgekehrte

Fügen Sie diese Terminalüberschreibung zu ~ / .tmux.conf hinzu :

set -g terminal-overrides 'rxvt-unicode*:sitm@,ritm@'

2
Fix 1 scheint zu funktionieren, aber es ist 2015, kann das wirklich so schwierig sein?
user1338062

Leider kann ich keine bessere Lösung für dieses Problem finden + Ich habe aufgehört zu suchen, als ich diese auf einer tmux-Mailingliste fand ... :(
andras.tim

4
Nun, laut tmux FAQ sollte tmux 2.1 das Verhalten beheben. Ich denke, das wird nur vorübergehend benötigt. Ich persönlich gerade tat , was die OP sagte und stellte meine default-terminalzu xterm.
user1338062

Manchmal ist das nicht so gut. Wenn Sie zB mit PuTTY kompatibel sein müssen, können Sie xtermnur screeenVarianten verwenden.
andras.tim

1
Fix 1 hat für mich funktioniert, aber mein Solarium ist dircolorsverschwunden. Ich konnte es beheben, indem ich TERM screen-ites der Liste der Terminals in hinzufügte ~/.dircolors.
Benjamin W.

4

Schneller Weg:

set -g terminal-overrides "screen.xterm-new"

Funktioniert ohne weitere Magie (und beachtet trotzdem die Warnung im tmux-Handbuch, dass der Terminaltyp "screen" oder eine Ableitung davon sein muss).


1
Funktioniert bei mir einwandfrei, watch -n10 -d COMMAND args..erlaubt zum Beispiel das Erkennen von Änderungen (wie Leerzeichen! Wie macht man kursive Leerzeichen?). Ich denke, das sollte die akzeptierte Antwort sein. Hinweis: Wenn das Terminal bereits geöffnet ist, verwenden SieTERM=screen.xterm-new; export TERM
Tino

2

Ich starte urxvt in Arch Linux. Die Antwort des Op hat mir nicht geholfen. Das hat mir geholfen:

https://github.com/tmux/tmux/blob/2.1/FAQ#L355-L383


suche italicund starte das; dann stelle dies in die tmux config

set -g default-terminal "tmux"

benutze nicht "tmux-256color". (Versuchen Sie es, ich nehme an, aber es hat bei mir nicht funktioniert.)


Fügen Sie dies schließlich zu Ihrem RC hinzu (.zshrc, .bashrc usw.):

export TERM="xterm-256color"
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.