【问题标题】:Is it possible to bindkey Shift+Enter in zsh?是否可以在 zsh 中绑定键 Shift+Enter?
【发布时间】:2017-04-08 07:25:27
【问题描述】:

我开始在 macOS Sierra 上使用 zsh。我想要以下键映射:

  • 输入 => 接受行
  • Shift-Enter => 接受并按住

但是,我似乎无法区分这两者。我只能输入 Enter 和 Esc-Enter,但不能输入 Shift-Enter:

bindkey "^M"   accept-line     # Enter
bindkey "^[^M" accept-and-hold # Esc-Enter
bindkey "????" accept-and-hold # Shift-Enter

是否可以检测和处理Shift-Enter?

【问题讨论】:

    标签: zsh zshrc


    【解决方案1】:

    zsh(以及其他 shell)不作用于键绑定,而是作用于从终端接收的键序列。将按键和组合转换为按键序列是终端的责任。您可以通过按 Ctr+v 然后按组合键来检索组合键的键序列,例如Shift+Enter.

    默认情况下 Enter 和 Shift+Enter(以及 Ctrl+v kbd> 和 Ctrl+Shift+m) 都生成相同的键序列^M(至少在最常见的终端仿真器中)。

    幸运的是,一些终端模拟器允许配置发送的键序列。例如 iTerm2 允许您设置发送转义序列的自定义键绑定(在 Profile > Keys 中),您应该能够为 Shift 定义一个序列kbd>+Enter 那里,例如[[SE 然后可以在zsh:bindkey '^[[[SE' 'accept-and-hold' 中进行适当的设置。 (很遗憾,我目前无法使用 Mac,因此无法对此进行测试)。

    【讨论】:

    • 你的回答救了我。我正在使用 mac,它的默认 bash zsh 确实提供了定义键序列的选项:Preferences > Profiles > [+] 按钮。
    【解决方案2】:

    这可能会回答您的问题(不能发表评论,没有 50 个代表)。您可以尝试# showkey --scancodes,它会为您提供关键代码并查看手册页,例如man zshzle 并搜索“代码”。我试图映射 shift 键但没有成功。也许是不可能的。还可以查看bindkey -l,它为您提供键盘映射,bindkey -M emacs 为您提供 emacs 键盘映射

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-11
    • 2015-12-12
    • 1970-01-01
    • 2018-07-18
    • 2019-10-25
    • 1970-01-01
    • 2010-10-10
    相关资源
    最近更新 更多