在zsh中,是否可以绑定Shift+Enter键?

13

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

  • Enter => accept-line
  • Shift-Enter => accept-and-hold

然而,我似乎不能区分这两个按键。我只能获得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吗?

2个回答

15

zsh(以及其他shell)并不会对按键绑定进行操作,而是会针对从终端接收到的按键序列进行操作。将按键和组合键转换为按键序列是终端的责任。您可以通过按下Ctr+v,然后再按下组合键来检索键序列,例如Shift+Enter

默认情况下,EnterShift+Enter(以及Ctrl+vCtrl+Shift+m)都会生成相同的键序列^M(至少在大多数常见的终端模拟器中是这样)。

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


你的回答救了我。我正在使用Mac,它的默认bash zsh 确实提供了定义键序列的选项:首选项 > 配置文件 > [+] 按钮。 - VimNing

0

这可能会解决您的问题(无法在评论中发布,没有50个声望)。您可以尝试使用# showkey --scancodes,它会给出键码,并查看手册页,例如man zshzle并搜索“code”。我尝试过映射Shift键,但没有成功。也可以查看bindkey -l,它会给出键位图和bindkey -M emacs用于emacs键位图。


在 macOS 上似乎没有可用的“showkey”。 - Joseph Pecoraro
你可以尝试访问http://macbiblioblog.blogspot.de/2014/12/key-codes-for-function-and-special-keys.html?m=1或者在谷歌上搜索Mac键码。 - rav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接