我想修复这个经常出现的问题:远程服务器上的 shell 认为我的终端的退格键是^?
,有时它认为是,但实际上它并不正确,当我按退格键时会输出错误的字符。如果^H
我在 .bashrc 文件中将其设置为 ^H 或 ^? ,并使用其他终端访问服务器,结果通常会出错。所以当我注意到退格键错误时,我不得不手动输入来修复它。stty erase ^H
stty 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
而额外的奖励是,他们也能制造Home并End工作得一样好。
答案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
不是sh
shell。检查当前 shell 名称:
echo $SHELL
将用户 shell 更改为 bash:
chsh --shell /bin/bash $LOGNAME