Linux终端下的退格和删除键^H ^? ^[[三~ 杂记

起源

偶尔为了学好Linux, 得要懂一些Unix考古学.
比如为何Emacs的暗中同意飞快键那么难按, 又例如烦人的换行符 \r和\n,
以及这一次的^H ^? ^[[3~.

当下本身见到讲考古学讲得最棒的书是《UNIX&LINUX大学教程》(“Harley 哈恩’s
Guide to Unix and Linux”, 笔者:Harley 哈恩). 书中第8章 Unix键盘使用,
讲述了^H ^? 的前因后果.

wikipedia
上点数了各ASCII码的二进制\十6进制\极限输入\C语言 表示方法.

简单来说的话,

终端 名称 ASCII(16进制) 备注
^H Bs(退格) 0X08 按 CTRL+H 键可以得到
^? Del 0X7F 只是一种表示方法,按CTRL+? 键得不到这个键值. 有时可以通过PC机键盘按 CTRL+Backspace键得到这个值
^[[3~ Delete 0X1b, 0X5b, 0X33, 0X7e 四字节 非ASCII码.PC机键盘上的Delete键

Linux上erase非能量信号表示删除最后键入的字符. 那一个功率信号即能够绑定到终端的^H上,
也得以绑定到巅峰的^?上. (甚至随便你欣赏的哪些键. )
至于具体绑定在极限哪个键值上,终端上输入 stty -a 能够看到.

来得按键的ASCII码命令 showkey -a

在极限里面输入 showkey -a 然后输入按键,
能够赢得这么些按键的ASCII码和贰进制,十6进制表示.输入CT索罗德L+D 结束.

能够自动实验一下和谐键盘上的Backspace、CT凯雷德L+Backspace、CT奥德赛L+H、Delete
都以怎么值.

行使远程登录工具的2个普遍难题正是长途系统上erase时域信号和本地键盘Backspace键不包容,
本来是想删除前三个字符, 显示器上却输入了^H.

那篇文章讲述了各终端模拟器修改Backspace键的键码方法.

更改一下极限的erase非时域信号绑定值也是①种办法:
stty erase ^H 或者
stty erase ^?

Xshell 伍下的表征

Xshell刚爆出有后门漏洞, 供给升高到最新版.

Xshell 5私下认可erase绑定到 ^?, 不过它有个有意思的设置.
若是键盘功用键类型设置为暗中同意状态, Backspace键种类选^?, 或许^H,
都可以起删除前边字符的功用. CLX570TL+H键也能去除字符. 看起来它是全自动调整了.
而且在它当中使用Emacs, C奥德赛TL+H键又回涨成了助手前缀键, 而不是删除键.

Emacs的C-h和^H

长距离登录工具MobaXterm 九.一 暗许也是把erase能量信号绑定到了^H,
Backspace暗中同意也时有发生^H键. CT翼虎L+H键也发送^H, 能够去除前边的字符.

不过一旦在极端里使用Emacs, 就会发现它的声援前缀键 C-h 和 ^H 争辨,
按CT卡宴L+H 是去除字符. 这一年只得按<F一>键来代替C-h

消除办法也许在Emacs的布置文件里重新键绑定, 大概stty erase ^?
然后把Backspace键改为 ^? ( MobaXterm里正是收回勾选Backspace的^H设置,
Backspace键就会化为^?. )

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注