了解使用 Ctrl-v 转储终端字符序列时发生了什么?

the*_*fog 1 terminal character-encoding escape-characters

如果我想将键映射绑定到 zsh 中的函数或小部件,我了解到我首先必须在提示符下点击Ctrl+ v-,然后输入我想要使用的键序列,然后在我的键绑定中使用输出命令。
例如,如果我想映射到在编辑器中打开当前命令行内容的操作,我需要Ctrl+xCtrl+v

  • 点击Ctrl+ v- 进入“转储密钥模式”
  • Ctrl+xCtrl+v
    • 就我而言,这会产生 ^X^E
  • ^X^E并在我的键绑定命令中使用它,例如
bindkey "^X^E" edit-command-line
Run Code Online (Sandbox Code Playgroud)

为什么这是必要的,当我这样做时,“幕后”实际发生了什么?

Jul*_*ier 5

当您按下Ctrl- 时V,shell 将通过忽略键盘中断并简单地将按下的组合键作为输入字符来启动。这很容易实现,因为 ASCII 旨在容纳所有控制字符。

当然,在显示器上它必须作弊并显示^相应的键,否则它会输出控制字符而不是您需要看到的内容。

请注意,bindkey文档显示它支持控制字符的两种表示法:(示例参考Ctrl- X

  • 插入符号,即显式编写插入符号 ( ^) 后跟相应的控制字符的文本(在此问题中不需要Ctrl-V方法);例子:^X
  • C-后跟控制字符;例如:C-x。这会导致某些组合键需要转义(即使您不使用它)。您可能应该阅读全文screenbindkey手册。