我开始在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
(以及其他外壳程序)不作用于键绑定,而是作用于从终端接收的键序列。终端机负责将按键和组合转换为按键顺序。您可以通过按Ctr+,v然后按组合键(例如Shift+)来检索组合键的键序列Enter。
默认情况下,Enter和Shift+ Enter(以及Ctrl+ v和Ctrl+ Shift+ m)都生成相同的键序列^M
(至少在大多数常见的终端仿真器中)。
幸运的是,某些终端仿真器允许配置发送的键序列。例如,iTerm2允许您设置发送转义序列的自定义键绑定(在Profile> Keys中),您应该能够在那里定义Shift+ 的序列Enter,例如[[SE
然后可以在zsh
:中进行适当的设置bindkey '^[[[SE' 'accept-and-hold'
。(不幸的是,我目前无法访问Mac,因此无法对此进行测试)。