zsh(z shell)数字键盘/数字锁不起作用


46

我刚刚升级到zsh / oh-my-zsh。我几乎立即在机器上注意到10位数字小键盘无法正常工作。它正在用bash和鱼壳工作。

奇怪的是,如果按住fn /功能键,它的作用类似于numlock并且可以工作,但它不会“锁定”,因此必须按住fn来键入数字。

有什么想法吗?

Answers:


89

小键盘键发送的密钥符号与第一行中的“普通”数字键不同。例如:numpad-1-key发送,KP_1而1-key只是发送1

某些终端会自动重新映射小键盘键,以将相同的代码发送到外壳。另外,某些外壳程序(例如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-stringout-string。如果in-string键入,则将其out-string推回并视为输入。

^[Oq您的系统上的实际代码(例如)可能有所不同。您可以按Ctrl+,v然后按相应的键以获取终端的代码。


3
谢谢您,先生,这对我来说非常有效,Ctrl+ v提示很棒!
BradGreens 2014年

1
谢谢,这确实有用,但是Apple USB键盘缺少一些键。这是Apple Keyboard的按键绑定:#键盘#0。输入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”“



github.com/krowe/kshrc-k800-keybindings使这个基于这个答案。
krowe

16

要完成@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" "="

1
罗宾,您能否扩大答案以包括OP应该在何处输入此信息以纠正他们的问题?
2014年

2
这对我+有用,除了(必须使用bindkey -s "^[Ok" "+")和=(缺少bindkey -s "^[OX" "="
dain

4

还补充了@adaephon的答案。这是我在Dell台式机上必须使用的功能,可能会有所帮助。只需将其添加到您的.zshrc文件中即可。

(顺便说一句,不要从所有答案中添加绑定,每个键只能有一个绑定)

# 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 "^[OQ" "/"
bindkey -s "^[OR" "*"
bindkey -s "^[OS" "-"
bindkey -s "^[Ol" "+"
#END Keypad

欢迎来到超级用户!您能否编辑您的答案,以包括有关这是什么以及如何使用/在何处使用的一些指导?
Excellll

此解决方案适用于带有Windows键盘的zsh(PUTTY,带有Terminal > Keyboard > Initial state of numeric pad > Normal
Ivan Castellanos

3

在我的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" "="

但是其他人提出的解决方案可以正常工作。


1

如果您使用Kitty在SSH上访问Linux服务器,并且键盘可以在Bash上正常工作,但不能在ZSH上正常工作,则可以尝试在~/.zshrc配置文件中添加以下内容:

# 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 "^[OS" "-"
bindkey -s "^[OR" "*"
bindkey -s "^[OQ" "/"

保存。注销并再次登录以重新加载ZSH配置,或者您也可以在终端中键入以下内容:

. ~/.zshrc

键盘现在应该可以正常工作了!


这将重复另一个答案,并且不添加任何新内容。除非您确实有新贡献,否则请不要发布答案。
DavidPostill

让我不同意。只有这个答案具有相似的代码:superuser.com/a/907695/351420 并且我解释了上下文以及如何使用这些代码,恕我直言。
加百利Hautclocq
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.