在 Bash 中使用 Readline 定义键绑定时如何使用“\M-\C-”作为键序列前缀?

在 Bash 中使用 Readline 定义键绑定时如何使用“\M-\C-”作为键序列前缀?

如果我放入"\M-\C-k": kill-whole-line我的~/.inputrc文件,结果是"\213": kill-whole-line(显示为bind -p)。

但是,如果我更改\M-\e( "\e\C-k": kill-whole-line),键绑定将按预期工作。

在使用 Readline 定义键绑定时,如何使用\M-\C-("meta-control") 作为前缀bash

答案1

你不能使用,\M-因为它坏了。继续使用\eMeta/Alt 前缀。

在 readline 绑定中使用\M-不能可靠地与终端仿真器一起使用,终端仿真器\x1b在按下 Meta/Alt 时前置一个 ESC ( ) 字符而不是打开高位和/或使用 UTF-8 语言环境(这两种语言通常是大多数现代的默认设置)系统[1])。

对于某些版本的 bash(例如5.0,但是不是较新的5.1), using 的\C-\M-工作方式与 不同\M-\C-,因此只需使用\C-\M-k而不是\M-\C-k实际上可以做你想要的事情 - 直到下一次更新;-)

bash-5.0$ bind '"\C-\M-k": shell-backward-kill-word'
bash-5.0$ bind '"\M-\C-k": shell-kill-word'
bash-5.0$ bind -p | grep -a shell-.*kill-word
"\e\C-k": shell-backward-kill-word
"\213": shell-kill-word

[1]:但不是xterm,你需要像XTerm*VT100.metaSendsEscape: true在你的~/.Xresources.

相关内容