Sequência de escape estranha enviada pelo vim para o terminal
-
21-12-2019 - |
Pergunta
vim parece enviar vários itens estranhos (ou seja,não documentado) sequências de escape para o terminal subjacente ao usar o esquema inkpot.Não consegui combiná-los com nenhum código de escape VT-100 ou ANSI;alguém sabe o que são essas sequências?
^[[3231m
^[[4232m
^[[3130m
Essas sequências aparecem como tokens inválidos em um emulador de terminal pelo qual sou responsável e gostaria de adicionar suporte para essas sequências se puder encontrar a documentação adequada para elas.
As seguintes variáveis de ambiente relacionadas ao terminal são definidas nos sistemas afetados:
TERM=xterm
COLORTERM=
Não tentei nenhuma outra configuração para essas duas variáveis.
vim é a versão 7.2, mas tentei versões mais recentes com o mesmo efeito.
Obrigado!
Solução
O seu terminal suporta o modo de 88 ou 256 cores?Nesse caso, você provavelmente deveria usar um valor TERM como xterm-88color
ou xterm-256color
em vez de simples xterm
.
tinteiro isenta especificamente o suporte para terminais que suportam apenas 8/16 cores.Do alto do tinteiro fonte:
" 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.
O código que configura a coloração da sintaxe assume que se o terminal não suportar 88 cores, ele deverá suportar 256 cores.Ele não tenta fornecer valores alternativos para o caso de 8 cores (por exemplo,quando TERM=xterm
).Talvez fosse bom se tinteiro emitiu uma mensagem de erro (e não modificou as configurações de cores) se o terminal não parecesse ter suporte de cores apropriado.
As sequências de controle que você está vendo resultam da tentativa de gerar uma sequência de controle de cores de terminal de 8 cores para um número de cor que está fora da faixa de 0 a 7 de entradas aceitáveis para esse tipo de terminal.Então, essas sequências provavelmente não são válidas, mas também não são inteiramente intencionais (surgindo porque tinteiro assume suporte de 256 cores, mas o xterm
A entrada terminfo só sabe como lidar com o suporte básico de 8 cores).
Por exemplo, tinteiro define o Normal
cor de primeiro plano da sintaxe para 79 em terminais de 88 cores;isso é traduzido para 231 para terminais que não sejam de 88 cores (ou seja,para terminais de 256 cores, mas também para terminais de 8 cores xterm
).
Quando você tenta formatar esse número de cores fora do intervalo com TERM=xterm
, você obtém o resultado ^[[3231m
que você encontrou:
% tput -T xterm setaf 231 | od -a
0000000 esc [ 3 2 3 1 m
0000007
(ou seja,inserindo 231
entre ^[[3
e m
)
Se você usar xterm-256color
, você obtém um resultado de aparência mais normal:
% tput -T xterm-256color setaf 231 | od -a
0000000 esc [ 3 8 ; 5 ; 2 3 1 m
0000013
(ou seja,inserindo 231
entre ^[[38;5;
e m
)
Da mesma forma, o Normal
sintaxe A cor de fundo de 88 cores de 80 é traduzida para um valor de 256 cores de 232 e produz o erro ^[[4232m
sequência para xterm
(mas produziria o mais razoável ^[[48;5;232m
sob xterm-256color
).
Outras dicas
^[[3231m
parece muito com uma definição de cor feita/errada:
^[[32;31m
o que não faria muito sentido de qualquer maneira.
Isso acontece com um valor específico para $TERM
ou por qualquer valor?Qual versão do Vim?De que emulador de terminal estamos falando?