Étrange séquence d'échappement envoyée par vim au terminal
-
21-12-2019 - |
Question
vim semble envoyer plusieurs étranges (c.-à-d.non documenté) des séquences d'échappement vers le terminal sous-jacent lors de l'utilisation du schéma inkpot.Je n'ai pas pu les faire correspondre à des codes d'échappement VT-100 ou ANSI ;est-ce que quelqu'un sait quelles sont ces séquences ?
^[[3231m
^[[4232m
^[[3130m
Ces séquences apparaissent comme des jetons invalides dans un émulateur de terminal dont je suis responsable, et j'aimerais ajouter la prise en charge de ces séquences si je peux trouver la documentation appropriée pour elles.
Les variables d'environnement suivantes liées au terminal sont définies sur les systèmes concernés :
TERM=xterm
COLORTERM=
Je n'ai essayé aucun autre paramètre pour ces deux variables.
vim est la version 7.2, mais j'ai essayé des versions plus récentes avec le même effet.
Merci!
La solution
Votre terminal prend-il en charge le mode 88 ou 256 couleurs ?Si tel est le cas, vous devriez probablement utiliser une valeur TERM telle que xterm-88color
ou xterm-256color
au lieu de simple xterm
.
encrier décline spécifiquement la prise en charge des terminaux qui ne prennent en charge que 8/16 couleurs.Du haut du encrier source:
" 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.
Le code qui configure la coloration syntaxique suppose que si le terminal ne prend pas en charge 88 couleurs, alors il doit prendre en charge 256 couleurs.Il n'essaie pas de fournir des valeurs de repli pour le cas de 8 couleurs (par ex.quand TERM=xterm
).Ce serait peut-être bien si encrier a émis un message d'erreur (et n'a pas modifié les paramètres de couleur) si le terminal ne semblait pas disposer d'un support de couleur approprié.
Les séquences de contrôle que vous voyez résultent de la tentative de génération d'une séquence de contrôle de couleur de terminal à 8 couleurs pour un numéro de couleur situé en dehors de la plage 0 à 7 d'entrées acceptables pour ce type de terminal.Ainsi, ces séquences ne sont probablement pas valides, mais elles ne sont pas non plus entièrement intentionnelles (dues au fait que encrier suppose un support de 256 couleurs, mais le xterm
terminfo ne sait gérer que la prise en charge de base de 8 couleurs).
Par exemple, encrier définit le Normal
syntaxe couleur de premier plan à 79 sur les terminaux 88 couleurs ;cela se traduit par 231 pour les terminaux non-88 couleurs (c'est-à-direpour les terminaux 256 couleurs, mais aussi pour vos 8 couleurs xterm
).
Lorsque vous essayez de formater ce numéro de couleur hors plage avec TERM=xterm
, vous obtenez le résultat ^[[3231m
que tu as trouvé :
% tput -T xterm setaf 231 | od -a
0000000 esc [ 3 2 3 1 m
0000007
(c'est à dire.insertion 231
entre ^[[3
et m
)
Si tu utilises xterm-256color
, vous obtenez un résultat plus normal :
% tput -T xterm-256color setaf 231 | od -a
0000000 esc [ 3 8 ; 5 ; 2 3 1 m
0000013
(c'est à dire.insertion 231
entre ^[[38;5;
et m
)
De même, le Normal
syntaxe La couleur d'arrière-plan de 88 couleurs de 80 est traduite en une valeur de 256 couleurs de 232 et produit l'erreur ^[[4232m
séquence pour xterm
(mais cela produirait le plus raisonnable ^[[48;5;232m
sous xterm-256color
).
Autres conseils
^[[3231m
ressemble beaucoup à une définition de couleur faite/mal passée :
^[[32;31m
ce qui n'aurait pas beaucoup de sens de toute façon.
Est-ce que cela se produit avec une valeur spécifique pour $TERM
ou pour n'importe quelle valeur ?Quelle version de Vim ?De quel émulateur de terminal parlons-nous ?