有谁知道如何在 inputrc 中将组合键与 Alt 绑定?
我想将组合键Alt+映射Backspace到backward-kill-word
,但是当我按Ctrl+V和Alt+Backspace查看它代表的字符时,它会^[
在被删除之前显示一小会儿,或者根本不显示任何内容。
我知道为了将Ctrl+绑定Left Arrow到某些东西,我可以按Ctrl+ V,它将键入^[[1;5C
然后替换^[
为\e
,最后写入将此行添加到.inputrc
:
"\e[1;5C": forward-word
但这个方法对我来说不起作用Alt+ (literally anything)。
答案1
对于通常发送单个字符的键,Alt+键通常发送转义字符,后跟该字符。特别是,Alt+Backspace发送\e\177
其中\e
是转义字符(在视觉上表示为^[
),并且\177
是退格字符(在视觉上表示为^?
- 更准确地说,这是删除字符,但我将在这个答案中使用名称“退格”)。 (根据您的配置,退格字符可能会被\b
直观地表示为^H
。)
当您按Ctrl+ V Alt+时Backspace,Ctrl+V 字符告诉终端(或应用程序,取决于终端模式)按字面解释下一个字符,因此这会插入一个转义字符,该字符在视觉上表示为^[
。然后终端还有一个字符需要读取,这是一个退格键,它会删除您刚刚输入的转义字符。
要查看按键发送的完整字符串,可以使用此命令,并在 2 秒内键入按键:
stty raw; sleep 2; echo; stty cooked
stty raw
将终端切换到原始模式,其中控制字符按原样插入,然后stty cooked
再切换回来。实际上,Alt+Backspace是极少数需要这样做的情况之一:大多数键和弦仅发送单个控制字符或转义字符,后跟可打印字符。
在.inputrc
, 中涵盖两种常见情况(使用删除或退格字符):
"\e\177": backward-kill-word
"\e\b": backward-kill-word
请注意,转义序列取决于您的终端。某些终端不发送某些键和弦的转义序列,或者发送非标准转义序列,对于多个键和弦可能是相同的。但是,如果您^[
在按Ctrl+ V Alt+时短暂看到Backspace,则表明您的终端针对该特定键和弦执行了标准操作。