当我按向上箭头键时,如何停止显示“[A”?

per*_*nce 2 bash keyboard

我有时会使用 bash 和向上箭头键,以便能够快速获取我以前使用的命令。令人恼火的是,有时当我这样做时,我得到的是一个[A而不是以前的命令。在网上做了一些研究后,看起来这是一个代表向上箭头键发送到计算机的关键代码。

我似乎无法在网上找到任何答案。我怎样才能阻止这种情况在未来发生?

roa*_*ima 8

该序列实际上是Escape[A,它是Ecma在 1976 年采用的作为标准ECMA-48的集合的一部分,被 ANSI 作为一个单独但几乎相同的标准支持多年(后来撤回),并且还被ISO/ IEC 6429在路上。这种多重标准化的结果是,虽然它们经常被称为 ANSI 转义码,但它们应该被正确地称为 ECMA-48 控制函数*

[A在屏幕上看到而不是动作的通常原因是初始的转义码已被意外吸收。除非我先按Ctrl V,否则我无法在键盘上重现此内容,这会告诉终端线路驱动程序将下一个字符作为文字处理。

所以,我们可以得到这个序列Ctrl VEscape[A,产生可见的输出[A

您会注意到,如果您Escape[A快速连续按下字符序列,光标确实会向上移动。但是,如果您在第一个字符之后暂停,您将无法获得光标移动,这是因为 Escape 字符具有与之关联的超时。在连接到 UNIX 系统的慢速串行线路上,这曾经是一个真正的问题,最接近的等价物是缓慢或间歇性的网络连接,在此序列传输过程中会有短暂的延迟。

现在回答你的问题,如何防止这种情况发生。没有多少,如果你是一个间歇性的网络连接上你可以做的,也许除了使用备用序列中的一个,如Escapek... k...k这是命令“vi模式”编辑期间可用(set -o vi)。


* 就像 JavaScript 应该被称为 ECMAScript,我想