Backspace不能删除字符而只是显示^H问题
问题描述:在tclsh中,当试图用Backspace键删除字符时,并没有删除光标前一个字符,而是显示^H。
解决办法:键入”stty erase ^H”命令即可。
问题分析:这个问题并不是tclsh特有的,很多程序都可能存在这个问题。根源在于tclsh程序做行编辑之类操作,并不是使用readline库,而是依赖于终端。因此我们可以通过stty对终端重新配置来解决这个问题。当使用readline时,终端处于raw模式,readline自己来解释backspace、delete、箭头等特殊字符;当不使用readline时,终端处于cooked模式,由终端驱动来负责解释特殊字符。
Q: Backspace键并未删除光标左面那个字符,仅仅显示^H,而DEL键完成了删除操作
A: Sun Microsystems 2001-03-08 执行"stty -a"将看到"erase = ^?",表示此时DEL键对应删除操作。
如果正在使用xterm,可以用"tset"命令设置控制字符对应的操作。
其他窗口中,假设目前使用/sbin/sh,尝试 $ stty erase ^H 这里^H的输入是Ctrl-H,某些时候可能需要Ctrl-V、Ctrl-H输入,还可以尝试 $ stty erase "^h" $ stty erase "^H" (大小写不敏感) 这里输入"^H",就是两个字符,一个^,一个H。
同样,如果想恢复到DEL删除 $ stty erase ^? 这里^?的输入是DEL,某些时候可能需要Ctrl-V、DEL输入,还可以尝试 $ stty erase "^?" 这里输入"^?",就是两个字符,一个^,一个?。
为了永久保留这个设置,在所使用的shell初始化文件中增加设置命令,比如c shell 的".cshrc",其他shell的".login"。