如何绑定“\C-;” 在 ~/.inputrc?

tij*_*agi 3 bash keyboard-shortcuts rxvt readline

我在 Emacs 中使用 Meta-ijkl 作为箭头,并M-;作为退格键,所以我想让 bash 中的键代表相同的样式。移动和删除效果很好,但由于某种原因,我无法绑定unix-line-discardC-;这会将从光标到开头的整行擦除到终止缓冲区中。由于默认的 emacs 复制、kill 和 yank 键是C-j,C-kC-y,因此另一个 C- 组合非常适合。并且\e:(Meta-Shift-;) 已经绑定到backward-kill-word. 默认情况下C-u这样做unix-line-discard,工作正常,但不方便按下。如果我将此功能重新绑定到,例如\C-g,它也可以正常工作。

~/.inputrc我有

"\C-;": unix-line-discard
Run Code Online (Sandbox Code Playgroud)

我也试过

"\C-\;": unix-line-discard
"\C-\x3b": unix-line-discard
Run Code Online (Sandbox Code Playgroud)

没有效果。C-v C-;除了通常的分号外,shell 中不打印任何内容,并且\C-;它的所有变体也只打印它,仅此而已。

我在 Urxvt 工作。

Tho*_*key 6

同意@meuh 的评论,终端不会为control;(通常)生成不同的代码。

@tijagi 建议的链接xterm适用于并且不适用于urxvt. 使用手册页urxvt显示您可以从这里开始:

   keysym.sym: string
       Compile frills: Associate string with keysym sym. The intervening
       resource name keysym. cannot be omitted.
Run Code Online (Sandbox Code Playgroud)

并使用以下设置之一:

*keysym.Control-semicolon: mybinding
URxvt.keysym.Control-semicolon: mybinding
Run Code Online (Sandbox Code Playgroud)

根据需要使用类名来覆盖现有资源,并且mybinding是您urxvt在键入时需要发送的任何内容control;(但请阅读手册页以获得正确的语法)。@meuh 建议使用\025( ^U),因为它通常绑定到unix-line-discard.

进一步阅读: