![zsh (z shell) 数字键盘/数字锁定不起作用](https://linux22.com/image/1405344/zsh%20(z%20shell)%20%E6%95%B0%E5%AD%97%E9%94%AE%E7%9B%98%2F%E6%95%B0%E5%AD%97%E9%94%81%E5%AE%9A%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我刚刚升级到 zsh/oh-my-zsh。我几乎立刻就注意到我的机器上的 10 位数字键盘无法使用。它在 bash 和 fish shell 中可以正常工作。
奇怪的是,如果我按住 fn/功能键,它就像 numlock 一样起作用并且可以工作,但它不会“锁定”,我必须继续按住 fn 才能输入数字。
有什么想法吗?
答案1
数字键盘键不会发送与顶行“普通”数字键相同的键符号。例如:数字键盘 1 键发送,KP_1
而 1 键只发送1
。
某些终端会自动重新映射数字键盘键,以将相同的代码发送到 shell。此外,某些 shell(例如bash
)只是将数字键盘键解释为与主块中的等效键相同。
zsh
不会自动进行映射,但您可以bindkey
自行进行映射。我使用以下命令~/.zshrc
使键盘正常工作:
# Keypad
# 0 . Enter
bindkey -s "^[Op" "0"
bindkey -s "^[Ol" "."
bindkey -s "^[OM" "^M"
# 1 2 3
bindkey -s "^[Oq" "1"
bindkey -s "^[Or" "2"
bindkey -s "^[Os" "3"
# 4 5 6
bindkey -s "^[Ot" "4"
bindkey -s "^[Ou" "5"
bindkey -s "^[Ov" "6"
# 7 8 9
bindkey -s "^[Ow" "7"
bindkey -s "^[Ox" "8"
bindkey -s "^[Oy" "9"
# + - * /
bindkey -s "^[Ok" "+"
bindkey -s "^[Om" "-"
bindkey -s "^[Oj" "*"
bindkey -s "^[Oo" "/"
bindkey -s in-string out-string
绑定in-string
到out-string
。如果in-string
输入了 ,out-string
则将其推回并视为输入。
实际代码(例如^[Oq
)可能与您的系统不同。您可以按Ctrl+ ,v然后按相应键以获取您的终端的代码。
答案2
为了完善@adaephon 给出的答案,以下是 Apple USB 键盘 (A1243) 的正确绑定。这些需要添加到~/.zshrc
。
# Fix numeric keypad
# 0 . Enter
bindkey -s "^[Op" "0"
bindkey -s "^[On" "."
bindkey -s "^[OM" "^M"
# 1 2 3
bindkey -s "^[Oq" "1"
bindkey -s "^[Or" "2"
bindkey -s "^[Os" "3"
# 4 5 6
bindkey -s "^[Ot" "4"
bindkey -s "^[Ou" "5"
bindkey -s "^[Ov" "6"
# 7 8 9
bindkey -s "^[Ow" "7"
bindkey -s "^[Ox" "8"
bindkey -s "^[Oy" "9"
# + - * / =
bindkey -s "^[Ol" "+"
bindkey -s "^[Om" "-"
bindkey -s "^[Oj" "*"
bindkey -s "^[Oo" "/"
bindkey -s "^[OX" "="
答案3
答案4
在我的 Mac OSX El Capitan 上,句号键是^[0n
而不是^[01
。此外,我有一个用于 Mac 的 Logitech 无线键盘,它的=
数字键盘上也有一个符号。我的最终映射如下所示:
# Keypad
# 0 . Enter
bindkey -s "^[Op" "0"
bindkey -s "^[On" "."
bindkey -s "^[OM" "^M"
# 1 2 3
bindkey -s "^[Oq" "1"
bindkey -s "^[Or" "2"
bindkey -s "^[Os" "3"
# 4 5 6
bindkey -s "^[Ot" "4"
bindkey -s "^[Ou" "5"
bindkey -s "^[Ov" "6"
# 7 8 9
bindkey -s "^[Ow" "7"
bindkey -s "^[Ox" "8"
bindkey -s "^[Oy" "9"
# + - * / =
bindkey -s "^[Ok" "+"
bindkey -s "^[Om" "-"
bindkey -s "^[Oj" "*"
bindkey -s "^[Oo" "/"
bindkey -s "^[OX" "="
然而其他人提出的解决方案却能正确运行。