如何避免 zsh 键绑定中的冲突?

如何避免 zsh 键绑定中的冲突?

我想CtrlgCtrlb在 zsh 中绑定一个函数。

gb-widget() { echo "geebee" }
zle     -N     gb-widget
bindkey '^G^B' gb-widget

这不适用于CtrlgCtrlb,但可以与其他任意键绑定一起使用(CtrlgCtrlx例如 )。也许问题是Ctrlb已经别名为backward-char

$ bindkey | grep -F '^B'
"^B" backward-char
"^G^B" gb-widget

但我想保留 emacsCtrlb绑定。有什么方法可以实现吗?

答案1

该问题有时有效/有时无效的原因可能是由于$KEYTIMEOUT

当您按下当前键盘映射中绑定的多字符序列中的一个键时,zsh 会等待$KEYTIMEOUT几毫秒,以便您按下第二个键。默认情况下,该值设置为 40。这已记录在案在 zsh 手册中

因此,如果您按下^G,您有 40 毫秒的时间来按下^B,否则两次按键将被解释为单独输入,而不是一个序列的一部分。

您显然可以改变的值$KEYTIMEOUT,例如使其更长,以便您有更多的时间按下第二个键。

(请注意,这可能会产生连锁反应,例如,如果您处于 vi 插入模式并尝试按下ESC进入 vi 命令模式,则 shell 将等待$KEYTIMEOUT几毫秒,因为有以 开头的多字符键绑定ESC- 尤其是箭头键!)

相关内容