Bash 退格键一次删除一个单词

Bash 退格键一次删除一个单词

我工作的地方有一台服务器使用 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 发送^hBackSpace并确保服务器使用该设置(stty erase '^h',放入~/.bashrc,将强制执行)。

相关内容