【问题标题】:Strange escape sequence sent by vim to terminalvim 发送到终端的奇怪转义序列
【发布时间】:2013-11-30 05:04:44
【问题描述】:

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

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

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

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

TERM=xterm
COLORTERM=

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

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

谢谢!

【问题讨论】:

标签: vim terminal-emulator


【解决方案1】:

您的终端是否支持 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 色终端(即 256 色终端,但也适用于您的 8 色 xterm),这将转换为 231。

当您尝试使用TERM=xterm 格式化此超出范围的颜色编号时,您会得到您找到的结果^[[3231m

% tput -T xterm setaf 231 | od -a
0000000  esc   [   3   2   3   1   m
0000007

(即在^[[3m之间插入231

如果你使用xterm-256color,你会得到一个更正常的结果:

% tput -T xterm-256color setaf 231 | od -a
0000000  esc   [   3   8   ;   5   ;   2   3   1   m
0000013

(即在^[[38;5;m之间插入231

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

【讨论】:

  • 这个答案比我的好很多。
  • 感谢您的详细解释!一段时间以来,我一直专注于其他错误报告;是时候重温这个了。
【解决方案2】:
^[[3231m

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

^[[32;31m

无论如何,这没有多大意义。

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

【讨论】:

  • 这也是我最初的猜测。我维护了 Konsole 的 TDE 版本,并提交了一份针对此令牌无法正常工作的错误报告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
  • 2015-12-02
  • 2013-10-04
  • 2015-05-09
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多