这里有两个行编辑器:内核提供的基本行编辑器(规范模式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样式的键绑定的混乱行为