我工作的地方有一台服务器使用 csh 作为默认 shell。我更喜欢 bash,所以每当我登录时,我都会启动bash
。
但不知为何,退格键会删除整个单词,而不是只删除字符。这是为什么?我该如何改变这种情况,让退格键逐个删除字符?
仅供参考,Shift+Bksp 会逐个字符地删除。如果可能的话,我希望 Shift+Bksp 会逐个单词地删除。只有在可能的情况下。
谢谢
附言:请不要告诉我按住 Shift 键;这真的很烦人。
答案1
有些终端发送^h
(字符数 8) 作为BackSpace密钥,有些终端发送^?
(字符数 127)。许多终端仿真器都可以配置,大多数程序都可以配置为知道需要哪个密钥。显然双方必须达成一致。
Stty 是应用程序查询终端配置的一种方式。erase = ^?
表示服务器上的终端描述文件声称,当您的终端发送 时^?
,意味着“擦除前一个字符”。werase = ^?
表示^?
“擦除前一个单词”。 这两个设置之间存在矛盾。
当您通过 ssh 登录时,ssh 客户端会发送终端的名称,该名称会放入TERM
环境变量中。然后,服务器上的程序会在数据库(称为 termcap 或 terminfo)中查找终端的描述。如果这些描述被破坏,或者某个配置文件(例如/etc/profile
或~/.login
或~/.bashrc
)用错误数据覆盖了这些描述,您可能会发现存在不匹配的情况。例如,问题的一个可能来源是,如果某个初始化文件包含命令stty werase '^?'
(强制^?
表示单词擦除),而您的终端发送^?
退格键。
理想情况下,您应该修复冲突,因为很多程序都会读取这些信息。
^?
在 Putty 中,您可以配置或^h
键发送哪个BackSpace。检查此设置的值。也许解决您的问题最简单的方法是让 Putty 发送^h
,BackSpace并确保服务器使用该设置(stty erase '^h'
,放入~/.bashrc
,将强制执行)。