我正在尝试在我的中进行以下绑定~/.inputrc
:
(Ctrl+Del): kill-word
(Ctrl+Backspace): backward-kill-word
(Ctrl+forward arrow): forward-word
(Ctrl+back arrow): backward-word
(Home): beginning-of-line
(End): end-of-line
我应该使用哪些实际的按键序列符号?
答案1
像这样的东西:
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[H": beginning-of-line
"\e[F": end-of-line
"\eOH": beginning-of-line
"\eOF": end-of-line
"\e[1~": beginning-of-line
"\e[4~": end-of-line
根据终端设置以及您是否使用screen
,xterm
会发送Home和的这些变体End,而Control修改的光标键会发送一致的值。您可以更改它(使用xterm
:其他终端通常不会)。
control/Del 和 control/backspace 可能不起作用,除非通过德尔您指的是 6 键编辑键盘上的左下键。对于 xterm,发送"\e[3;5~"
.
使用 Putty,您对“ctrlarrows”的选择很少,因为它使用控制修饰符在普通的和应用光标键的模式。也就是说,您可以在“\e[C”(正常)和“\eOC”(应用程序)之间切换。此外,还可以更改 home/end(改为 putty 开发人员称为“rxvt”的内容)以获得上面提到的“\e[H”。
进一步阅读:
答案2
功能键和光标键发送以 ESC(转义)字符开头的转义序列。按Ctrl+ V,然后按琴键或键和弦。这会按原样插入 ESC 字符,然后是转义序列中的其余字符。
例如,假设您按Ctrl+ V Ctrl+ Left,它会插入^[O5D
。^[
是转义字符。然后.inputrc
你将它与
"\eO5D": backward-word
给定键的转义序列取决于终端,因此您最终可能会将多个转义序列绑定到同一函数,具体取决于您使用的终端以及配置它们的方式。好消息是,总的来说,不存在与不同终端上的不同键相对应的转义序列。
许多终端不会为所有键和键发送不同的转义序列。例如,您可能会发现+ 和 ++Ctrl发送Left相同Ctrl的转义序列。在终端配置中可能有也可能没有解决这个问题的方法;看ShiftLeft这个帖子面向 Emacs 的讨论。也可以看看如何为定义 GNU 屏幕“命令字符”提供一套全面的可能性?和键盘输入和文本输出如何工作?和如何为定义 GNU 屏幕“命令字符”提供一套全面的可能性?有关该主题的一些背景信息。