zsh bindkey 不会改变向上和向下箭头键的行为

zsh bindkey 不会改变向上和向下箭头键的行为

我想更改上下箭头键的键绑定。默认情况下,我有:

bindkey
...
"^[[A" up-line-or-history
"^[[B" down-line-or-history
...

我已将这些行添加到我的 .zshrc 中:

bindkey '^[[A' up-line-or-search
bindkey '^[[B' down-line-or-search

虽然绑定已经改变,但这不会改变行为:

bindkey
...
"^[[A" up-line-or-search
"^[[B" down-line-or-search
...

我可以将 up-line-or-search 绑定到其他键,例如 '^R'。此问题在 emacs 模式和 vim 模式下都存在。我绑定了正确的键:

showkey -a

Press any keys - Ctrl-D will terminate this program

^[[A  27 0033 0x1b
      91 0133 0x5b
      65 0101 0x41
^[[B  27 0033 0x1b
      91 0133 0x5b
      66 0102 0x42

答案1

showkey可能实际上并没有显示正确的密钥代码。

看起来你的 shell 可能配置为告诉终端在smkxZsh 行编辑器启动时进入“应用程序”模式 ( ),并rmkx在行编辑器完成时进入“正常”模式 ( )。如果是这样,你的终端将^[OA在编辑命令行时(或在告诉终端使用应用程序模式的应用程序中,例如less)发送 ⬆️,但^[[A在其他情况下,例如使用showkey -a或时cat -v

通常更可靠的方法是按下CtrlV命令行,然后按下要检查的键,因为这样可以保证您处于正确的模式。这在emacsviins键映射中都有效。

但是,即使这样,对于某些组合键,尤其是涉及退格键的组合键,也会失败。要获取这些组合键的转义码,您必须在 中创建自定义键绑定.zshrc

bindkey '^[v' .describe-key-briefly

然后(重新启动 shell 后),您可以按AltV来查看任意组合键的输出(除了CtrlC,您无论如何都无法绑定它)。

相关内容