有没有办法通过 bindkey 绑定 Control+apostophe?
我试过:
bindkey "\C-'"
bindkey "^'"
bindkey "\C-\x27"
但这一切都没有起到作用
答案1
可能不行。至少在不修改终端的情况下不行。
shell 在终端上运行。终端上输入的基本单位是字符,而不是按键。当您向 shell 添加键绑定时,实际上是在绑定字符序列,而不是键组合。没有 Ctrl-撇号字符。
自从最早的基于 ASCII 的终端以来,就有一组键可以与 Ctrl 组合以产生单个字符。执行此操作的键对应于 ASCII 代码 0x3f 至 0x5f:? @ A-Z [ \ ] ^ _
当按下 Ctrl 键和其中一个字符时,将传输反转 0x40 位的值。0x3f?
变为 0x7f DEL
,其余部分变为 0x00 至 0x1f。撇号是 0x27,因此如果按照此规则将其与 Ctrl 键组合,它将变为 0x67,即g
。g
输入 Ctrl-撇号时获取 是没有意义的,因此终端不会这样做。
但是,可以绑定不对应于单个 ASCII 字符的键,例如箭头键。这是因为这些键被终端转换为转义序列(以 escape 开头的字符序列)。这些序列可以绑定到有用的操作。例如,ESC [ A
通常是向上箭头键,它绑定到 shell 中与历史相关的操作。
如果您下定决心,您可以让终端输出一些 Ctrl-撇号转义序列,然后在 bindkey 命令中使用该转义序列。要继续执行这些操作,请查阅终端的文档。