前进笔记

某些终端下退格键变为输入 ^H 的原因和解决方案

  在 Python 交互状态下,因为输错了内容,习惯性地按下 Backspace 键准备退格删掉错误字符,却变成了 ^H ,以至于不得不 Ctrl+C 重新开始。
  不得不说这是个令人懊恼的事情,我常常因为晚上看不清键盘而输错字符,一次又一次重新输入实在是令人抓狂,但这是个很有意思的现象,不得不思考,为什么会出现这个问题?
  遗憾的是,搜索引擎并没有给出合理的解释,大都只是提出了解两个决方案,并没有对此深入研究

两种解决方案:


问题原因

  顺着第二种方法,通过查询 ASCII 码表得知,^H 是退格的脱字符(^)表示法。
  这就很明了了,因为脱字符 ^ 代表的是按住Ctrl键,b那么 ^H 的意思就是按住 Ctrl 键并按下 H 即 Ctrl+H
  在某些终端中,Backspace 键默认就是映射了 Ctrl+H ,相当于按下 Backspace 等同于按下 Ctrl+H ,所以发送出去的也自然是 ^H
  但是服务端并不认为退格键有效,它认为删除字符( erase )这种操作应当使用 ^? 也就是 Del 的脱字符(此 Del 非键盘上的 Delete 键),因此不识别退格键,^H 就不具备了退格功能,于是就造成了问题
  想要查看终端操作绑定的对应键值,可以使用 stty -a 命令查看

简书看到这篇文章,解释了有关键值的一些问题,其中所提到的考古书籍恰恰是我正在研究的,推荐去看一看
Linux终端下的退格和删除键^H ^? ^[[3~ 杂记

关联文章:
获取键值以及让zsh支持Home键和End键

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »