有人知道如何在 zsh 中绑定功能键吗?我希望能够在我的终端中运行的程序中使用功能键,而不是将它们绑定到 zsh 中的某个功能。我尝试将 bindkey "\e[OP" key_f1 放入 .zshrc 中,但当我尝试这样做时,我得到了 No such widget `key_f1'。有什么建议吗?
答案1
要明确地将一个键分配给它自己,请使用
bindkey "\e[OP" self-insert
要解除密钥绑定,请使用
bindkey -r "\e[OP"
要获取特定键的符号,您只需使用cat
:因此cat
Enter F1在我的终端 (URxVT) 中生成以下字符串:^[OP
。这可能因终端而异,尤其是对于像Ctrl+这样的组合↑
但关于您的具体问题:我怀疑,这zsh
就是函数键在您的程序中不起作用的原因,因为当程序运行时,zsh
不应该捕获任何键。我认为更可能的是,程序本身不理解符号终端发送给它。因此,您可以尝试另一个终端(xterm
对我来说,在大多数情况下都有效)。如果失败,您可能需要检查X 服务器(~/.Xmodmap
在 Linux 中,不幸的是我不知道在哪里调整 OSX...)
答案2
我一直在尝试分配功能键 F1-F12,并找到了一种方法:- 在 zsh 中,在 .zshrc 文件中使用以下命令:bindkey -s '\eOP' ' clear\n' 调整要分配的命令的第二部分。 键代码可以在网上找到。
对于 bash,使用此方法:将“\eOQ”:“clear\n”绑定到您的 .bashrc 文件中以供永久使用。
您使用的终端通常已经分配了 F1、F10 和 F11 键,只需转到键盘快捷键菜单并重新分配或取消它们。
F1=\eOP F2=\eOQ F3=\eOR F4=\eOS F5=\e[15~ F6=\e[17~ F7=\e[18~ F8=\e[19~ F9=\e[20~ F10=\e[21~ F12=\e[24~ 的按键序列应该可以在大多数终端上工作,如果不是用户读取命令或 Cv 并按下按键来检查按键序列或谷歌搜索的话。