这里有两个行编辑器:内核提供的基本行编辑器(规范模式tty行编辑器)和bash的行编辑器(通过readline库实现)。两者都有一个“擦除前一字”命令,默认情况下绑定到Ctrl+ W。可以通过以下方式为规范模式tty行编辑器配置密钥stty werase:bash模仿它在tty设置中找到的键绑定,除非在其自己的配置中被覆盖。
将werase在tty线路编辑行为不能配置。它总是擦除(ASCII)空格分隔的单词。与tty行编辑器进行交互是很少见的-这就是您得到的,例如,当您输入cat不带参数的时候。如果您想在那里使用精美的键绑定,则可以在使用readline的rlwrap之类的工具下运行命令。
Bash提供了两个删除前一个单词的命令:unix-word-rubout(Ctrl+ w或通过set设置的stty werase)和backward-kill-word((M-DEL即Esc Backspace)),将一个单词视为当前语言环境和中的字母数字字符序列_。如果您想Ctrl+ Backspace删除以前的字母数字字符序列,请不要设置stty werase,而是在您的代码中添加以下行.inputrc:
"\C-h": backward-kill-word
请注意,这里假设你的终端发送的按Ctrl + H字符Ctrl+ Backspace。不幸的是,它是没有标准绑定的那些键之一(由于历史原因Backspace,尤其是一团糟)。
默认情况下,还有一个对称命令kill-word绑定到M-d(Alt+ D)。要将其绑定到Ctrl+ Delete,首先需要确定终端发送的转义序列,然后在中添加相应的行.inputrc。输入Ctrl+ V然后Ctrl+ Delete; 这将插入类似^[[3;5~首字母^[的转义字符的可视表示形式。然后绑定是
"\e[3;5~": kill-word
如果您对一个单词的定义都不满意,则可以在bash中提供自己的单词:请参阅bash 中emacs样式的键绑定的混乱行为