Bash,如何全局修复^ H和^?退格键问题


12

我想解决这个常见问题,即远程服务器上的Shell认为终端的退格键是^?,有时它认为是^H,并且碰巧是不正确的,并且当我按退格键时输出错误的字符。如果将其设置为^ H或^?用stty erase ^Hstty erase ^?在我的.bashrc文件,并使用一些其他的终端访问服务器,它往往最终是错误的。因此stty erase [whatever],当我发现Backspace键错误时,我不得不手动键入以进行修复。

我想做的是绑定^?^H退格,因为如果可以的话,我可以将其添加到我的所有.bashrc文件中,它肯定会结束这场噩梦。这可能吗?如果是这样,怎么办?

Answers:


8

此页面包含您在此问题上所需的所有信息;我建议你阅读。现在,如果您使用bash,则足以创建一个~/.inputrc包含以下行的文件:

"\e[3~": delete-char
# this is actually equivalent to "\C-?": delete-char
# VT
"\e[1~": beginning-of-line
"\e[4~": end-of-line
# kvt
"\e[H":beginning-of-line
"\e[F":end-of-line
# rxvt and konsole (i.e. the KDE-app...)
"\e[7~":beginning-of-line
"\e[8~":end-of-line

作为额外的奖励,他们将HomeEnd正常工作。


2

实际上,您确实需要http://web.archive.org/web/20120621035133/http://www.ibb.net/~anne/keyboard/keyboard.html中的大多数信息。对该信息的一种更正是他们对XTerm的建议:

*VT100.Translations: #override \
          <Key>BackSpace: string(0x7F)\n\
          <Key>Delete:    string("\033[3~")\n\
          <Key>Home:      string("\033[1~")\n\
          <Key>End:       string("\033[4~")
*ttyModes: erase ^? 

虽然这将使XTerm发送正确的字符,并将stty更改为backspace ^?,但^H在某些情况下,它仍会错误地报告为backspace,从而破坏了Vim instert模式下的backspace(请参见:https ://bugs.gentoo.org / 154090)。为避免这种情况,请VT100.backarrowKey: false改用,这样:

*VT100.backarrowKey: false
*VT100.Translations: #override \
          <Key>Delete:    string("\033[3~")\n\
          <Key>Home:      string("\033[1~")\n\
          <Key>End:       string("\033[4~")
*ttyModes: erase ^? 

(另请参见[请在此处插入链接])


阅读“为什么我需要50个信誉才能发表评论”,以确保您了解如何开始发表评论。
Pimp Juice IT

我不需要任何人进行任何澄清。相反,我对以上答案作了澄清和较小的更正。但是,如果答案中有记载,那就这样吧。我添加了围绕文本,使其成为完整的答案。
amosonn

另外,我的答案中缺少此链接,但是我不能在其中添加它。wiki.archlinux.org/index.php/Xterm#Fix_the_backspace_key
amosonn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.