vi编辑器奇怪关闭

vi编辑器奇怪关闭

关闭vi编辑器后(不让它加载整个文件),

-bash-3.2$ vi /var/spool/mail/user1
-bash-3.2$ 0;136;0c

留下0;136;0c提示,什么可能导致这种情况发生,不让加载vi内容或者是什么?

答案1

有几件事让我无法明确说出原因是什么:首先我不知道您是否正在使用vimvilenviheirloom vi。我不知道的第二件事是你是如何关闭的vi,但我会猜测一下。

据我所知,所有vi程序都使用转义序列来控制屏幕上显示的内容。也就是说,不使用窗口系统调用来定位光标和写入文本,而是vi使用 TERM 环境变量的值来找出它必须输出到哪种终端。根据 TERM 的值,它发送特殊的字节序列,通常或总是以 0x1b、ASCII“ESC”或转义字符开头。特殊字节被称为“转义序列”。

在过去,串行终端的硬件会执行特殊的操作,例如移动光标,或更改文本颜色或字体,或绘制线条,或根据这些转义序列更改为不同的字符集。vi据我所知,仍然使用它们。整个转义序列已经被抽象到一个名为“curses”或“ncurses”的库中,C 程序可以使用它。

我的猜测是,当你关闭时vi(可能通过执行 control-C 或 control-反斜杠),你正好vi在输出一些转义序列的中间。您看到的是该转义序列的最后几个字节。它之所以如此显示,是因为实际的 ASCII“ESC”字节从未得到输出,或者在 control-C 之前得到输出,并且终端将 control-C 解释为转义序列的一部分。无论终端认为它正在解释的转义序列比vi输出的字节序列短,您都会看到预期转义序列的剩余部分。

相关内容