Seltsame Escape-Sequenz, die von vim an das Terminal gesendet wurde
-
21-12-2019 - |
Frage
vim scheint mehrere seltsame (z. B.undokumentierte) Escape-Sequenzen an das zugrunde liegende Terminal, wenn das Inkpot-Schema verwendet wird.Ich konnte sie keinem VT-100- oder ANSI-Escape-Code zuordnen;Weiß jemand, was diese Sequenzen sind?
^[[3231m
^[[4232m
^[[3130m
Diese Sequenzen werden in einem Terminalemulator, für den ich verantwortlich bin, als ungültige Token angezeigt, und ich würde gerne Unterstützung für diese Sequenzen hinzufügen, wenn ich eine entsprechende Dokumentation dafür finden kann.
Auf den betroffenen Systemen sind folgende terminalbezogene Umgebungsvariablen gesetzt:
TERM=xterm
COLORTERM=
Ich habe keine anderen Einstellungen für diese beiden Variablen ausprobiert.
vim ist Version 7.2, aber ich habe neuere Versionen mit dem gleichen Effekt ausprobiert.
Danke!
Lösung
Unterstützt Ihr Terminal den 88- oder 256-Farben-Modus?Wenn ja, sollten Sie wahrscheinlich einen TERM-Wert wie verwenden xterm-88color
oder xterm-256color
statt schlicht xterm
.
Tintenfass lehnt ausdrücklich die Unterstützung für Terminals ab, die nur 8/16 Farben unterstützen.Von der Spitze des Tintenfass Quelle:
" This should work in the GUI, rxvt-unicode (88 colour mode) and xterm (256 " colour mode). It won't work in 8/16 colour terminals.
Der Code, der die Syntaxfärbung einrichtet, geht davon aus, dass das Terminal 256 Farben unterstützen muss, wenn es keine 88 Farben unterstützt.Es wird nicht versucht, Fallback-Werte für den Fall von 8 Farben bereitzustellen (z. B.Wann TERM=xterm
).Vielleicht wäre es schön, wenn Tintenfass Es wurde eine Fehlermeldung ausgegeben (und die Farbeinstellungen wurden nicht geändert), wenn das Terminal anscheinend nicht über die entsprechende Farbunterstützung verfügte.
Die Steuersequenzen, die Sie sehen, resultieren aus dem Versuch, eine 8-Farben-Terminal-Farbsteuersequenz für eine Farbnummer zu generieren, die außerhalb des akzeptablen Eingabebereichs von 0 bis 7 für diesen Terminaltyp liegt.Diese Sequenzen sind also wahrscheinlich nicht gültig, aber sie sind auch nicht ganz beabsichtigt (entstehen, weil Tintenfass geht von einer 256-Farben-Unterstützung aus, aber die xterm
Der Terminfo-Eintrag kennt nur die grundlegende 8-Farben-Unterstützung.
Zum Beispiel, Tintenfass legt die fest Normal
Syntax-Vordergrundfarbe auf 79 auf 88-Farben-Terminals;Dies wird für Nicht-88-Farben-Terminals in 231 übersetzt (d. h.für 256-Farben-Terminals, aber auch für Ihre 8-Farben-Terminals xterm
).
Wenn Sie versuchen, diese außerhalb des Bereichs liegende Farbnummer mit zu formatieren TERM=xterm
, erhalten Sie das Ergebnis ^[[3231m
Das hast du gefunden:
% tput -T xterm setaf 231 | od -a
0000000 esc [ 3 2 3 1 m
0000007
(d. h.einfügen 231
zwischen ^[[3
Und m
)
Wenn du benutzt xterm-256color
, erhalten Sie ein normaler aussehendes Ergebnis:
% tput -T xterm-256color setaf 231 | od -a
0000000 esc [ 3 8 ; 5 ; 2 3 1 m
0000013
(d. h.einfügen 231
zwischen ^[[38;5;
Und m
)
Ebenso die Normal
Syntax 88-Farben-Hintergrundfarbe von 80 wird in einen 256-Farben-Wert von 232 übersetzt und erzeugt den Fehler ^[[4232m
Reihenfolge für xterm
(würde aber das Vernünftigere hervorbringen ^[[48;5;232m
unter xterm-256color
).
Andere Tipps
sieht viel aus wie eine Farbdefinition fertig / Gone schief:
generasacodicetagpre.das wäre sowieso nicht viel sinnvoll.
kommt es mit einem bestimmten Wert für $TERM
oder für einen beliebigen Wert?Welche VIM-Version?Von welchem terminalen Emulator sprechen wir?