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

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

我想修复这个经常出现的问题:远程服务器上的 shell 认为我的终端的退格键是^?,有时它认为是,但实际上它并不正确,当我按退格键时会输出错误的字符。如果^H我在 .bashrc 文件中将其设置为 ^H 或 ^? ,并使用其他终端访问服务器,结果通常会出错。所以当我注意到退格键错误时,我不得不手动输入来修复它。stty erase ^Hstty erase ^?stty erase [whatever]

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

答案1

这一页包含有关此问题的所有信息;我建议您阅读它。现在,如果您正在使用,则创建一个包含以下行的文件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

大部分信息https://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 更改为将退格键更改为^?,但在某些情况下它仍会错误地报告^H为退格键,从而破坏 Vim 插入模式下的退格键(参见此处: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 ^? 

(也可以看看https://wiki.archlinux.org/index.php/Xterm#Fix_the_backspace_key

答案3

有可能您使用的bash不是shshell。检查当前 shell 名称:

echo $SHELL

将用户 shell 更改为 bash:

chsh --shell /bin/bash $LOGNAME

相关内容