我想更改上下箭头键的键绑定。默认情况下,我有:
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 可能配置为告诉终端在smkx
Zsh 行编辑器启动时进入“应用程序”模式 ( ),并rmkx
在行编辑器完成时进入“正常”模式 ( )。如果是这样,你的终端将^[OA
在编辑命令行时(或在告诉终端使用应用程序模式的应用程序中,例如less
)发送 ⬆️,但^[[A
在其他情况下,例如使用showkey -a
或时cat -v
。
通常更可靠的方法是按下CtrlV命令行,然后按下要检查的键,因为这样可以保证您处于正确的模式。这在emacs
和viins
键映射中都有效。
但是,即使这样,对于某些组合键,尤其是涉及退格键的组合键,也会失败。要获取这些组合键的转义码,您必须在 中创建自定义键绑定.zshrc
:
bindkey '^[v' .describe-key-briefly
然后(重新启动 shell 后),您可以按AltV来查看任意组合键的输出(除了CtrlC,您无论如何都无法绑定它)。