Странная управляющая последовательность, отправленная vim на терминал
-
21-12-2019 - |
Вопрос
vim, похоже, отправляет несколько странных сообщений (т.е.недокументированные) escape-последовательности для базового терминала при использовании схемы inkpot.Мне не удалось сопоставить их ни с какими кодами VT-100 или ANSI escape;кто-нибудь знает, что это за последовательности?
^[[3231m
^[[4232m
^[[3130m
Эти последовательности отображаются как недопустимые токены в эмуляторе терминала, за который я несу ответственность, и я хотел бы добавить поддержку этих последовательностей, если смогу найти для них соответствующую документацию.
В затронутых системах устанавливаются следующие переменные среды, связанные с терминалом:
TERM=xterm
COLORTERM=
Я не пробовал никаких других настроек для этих двух переменных.
vim - это версия 7.2, но я пробовал более новые версии с тем же эффектом.
Спасибо!
Решение
Поддерживает ли ваш терминал 88- или 256-цветовой режим?Если это так, то вам, вероятно, следует использовать значение термина типа xterm-88color
или xterm-256color
вместо простого xterm
.
чернильница в частности, запрещается поддержка терминалов, поддерживающих только 8/16 цветов.С вершины чернильница Источник:
" 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.
Код, который настраивает раскраску синтаксиса, предполагает, что если терминал не поддерживает 88 цветов, то он должен поддерживать 256 цветов.Он не пытается предоставить резервные значения для случая 8 цветов (напримеркогда TERM=xterm
).Может быть, было бы неплохо, если бы чернильница выдавал сообщение об ошибке (и не изменял настройки цвета), если терминал, по-видимому, не поддерживал соответствующую цветопередачу.
Управляющие последовательности, которые вы видите, являются результатом попытки сгенерировать последовательность управления цветом 8-цветного терминала для номера цвета, который находится за пределами диапазона 0-7 допустимых входных данных для этого типа терминала.Таким образом, эти последовательности, вероятно, недействительны, но они также не являются полностью преднамеренными (возникают из-за чернильница предполагается поддержка 256 цветов, но xterm
запись terminfo знает только, как обрабатывать базовую поддержку 8 цветов).
Например, чернильница устанавливает Normal
синтаксис: изменить цвет переднего плана на 79 на терминалах 88-го цвета;это значение преобразуется в 231 для терминалов, не содержащих 88 цветов (т.е.для 256-цветных терминалов, но также и для ваших 8-цветных xterm
).
Когда вы пытаетесь отформатировать этот номер цвета, выходящий за пределы диапазона, с помощью TERM=xterm
, вы получите результат ^[[3231m
что вы нашли:
% tput -T xterm setaf 231 | od -a
0000000 esc [ 3 2 3 1 m
0000007
(т.е.вставка 231
между ^[[3
и m
)
Если вы используете xterm-256color
, Таким образом, вы получите более нормальный результат:
% tput -T xterm-256color setaf 231 | od -a
0000000 esc [ 3 8 ; 5 ; 2 3 1 m
0000013
(т.е.вставка 231
между ^[[38;5;
и m
)
Аналогичным образом, Normal
синтаксис 88-цветной цвет фона, равный 80, преобразуется в 256-цветное значение, равное 232, и выдает ошибку ^[[4232m
последовательность для xterm
(но это привело бы к более разумному ^[[48;5;232m
под xterm-256color
).
Другие советы
^[[3231m
.
очень похоже на определение цвета / пошло не так:
^[[32;31m
.
Что бы не иметь большого смысла в любом случае.
Это происходит с определенным значением для $TERM
или для любого значения?Какую версию VIM?О каком эмуляторе терминала мы говорим?