vim发送到终端的奇怪的转义序列

时间:2013-11-16 21:35:48

标签: vim terminal-emulator

当使用墨块方案时,vim似乎向底层终端发送几个奇怪的(即未记录的)转义序列。我无法将它们与任何VT-100或ANSI转义码相匹配;有谁知道这些序列是什么?

^[[3231m
^[[4232m
^[[3130m

这些序列在我负责的终端模拟器中显示为无效令牌,如果我能为它们找到适当的文档,我想添加对这些序列的支持。

在受影响的系统上设置以下与终端相关的环境变量:

TERM=xterm
COLORTERM=

我没有尝试过这两个变量的任何其他设置。

vim是版本7.2,但我尝试过具有相同效果的新版本。

谢谢!

2 个答案:

答案 0 :(得分:4)

您的终端是否支持88或256色模式?如果是这样,您应该使用xterm-88colorxterm-256color之类的TERM值,而不是普通xterm

inkpot 特别声明不支持仅支持8/16色的终端。从inkpot 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.

设置语法着色的代码假设如果终端不支持88种颜色,那么它必须支持256种颜色。它不会尝试为8种颜色的情况提供回退值(例如,当TERM=xterm时)。如果 inkpot 发出错误消息(并且没有修改颜色设置),如果终端似乎没有适当的颜色支持,那也许会很好。


您正在看到的控制序列是由于尝试为该类型的终端的可接受输入的0-7范围之外的颜色编号生成8色终端颜色控制序列而产生的。因此,这些序列可能无效,但它们也不是完全有意的(因为 inkpot 假设256色支持,但xterm terminfo条目只知道如何处理基本8-颜色支持)。

例如, inkpot 在88色终端上将Normal语法前景色设置为79;对于非88色终端,这被转换为231(即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

类似地,80的Normal语法88色背景颜色被转换为256色值232并为^[[4232m生成错误的xterm序列(但会生成^[[48;5;232m下更合理xterm-256color

答案 1 :(得分:0)

^[[3231m

看起来很像是一个完成/出错的颜色定义:

^[[32;31m

无论如何都没有多大意义。

$TERM或任何值的特定值是否会发生?什么Vim版本?我们在谈论什么终端模拟器?