zsh (z shell) numpad / numlock не працює


46

Я щойно перейшов до zsh / oh-my-zsh. Майже одразу я помічаю на своїй машині, що 10-значний цифр не працює. Це працювало в башті та рибній оболонці.

Як не дивно, якщо я утримую клавішу fn / функція, вона діє як numlock і працює, але вона не «блокується», і мені доведеться продовжувати утримувати fn, щоб набрати цифри.

Якісь ідеї там?

Відповіді:


89

Клавіша numpad не надсилає ті самі символи клавіш, що і звичайна цифрова клавіша у верхньому рядку. Наприклад: клавіша numpad-1 надсилає, KP_1а 1-клавіша просто надсилає 1.

Деякі термінали автоматично перезазначають клавішу numpad, щоб надсилати ті самі коди в оболонку. Також деякі оболонки (наприклад bash) просто інтерпретують клавіші numpad як їх еквіваленти в головному блоці.

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а потім відповідну клавішу, щоб отримати код свого терміналу.


3
Дякую, сер, це прекрасно працювало для мене, і порада Ctrl+ vчудова!
BradGreens

1
Дякую, це було дуже корисно, але деяких клавіш для USB-клавіатури Apple не вистачало. Це ключова прив'язка клавіатури Apple: # Клавіатура № 0. Введіть bindkey -s "^ [Op" "0" bindkey -s "^ [On" "." bindkey -s "^ [OM" "^ M" # 1 2 3 bindkey -s "^ [Oq" "1" bindkey -s "^ [Або" "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" "

Посібник для цього: gnu.org/software/screen/manual/html_node/…
krowe


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
Робіне, ти міг би розширити свою відповідь, щоб вказати, куди ОП повинна ввести цю інформацію, щоб виправити їх проблему?
music2myear

2
Це працює для мене , за винятком +(довелося використовувати bindkey -s "^[Ok" "+") і =(відсутній bindkey -s "^[OX" "=")
Дейн

4

Також доповнює відповідь від @adaephon. Ось, що мені довелося використовувати для свого робочого столу Dell, можливо, це допоможе. Просто додайте його у файл .zshrc.

(BTW не додає прив’язки з усіх відповідей, у вас має бути лише одна прив'язка на ключ)

# 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

Це рішення працювало для мене на zsh з клавіатурою Windows (PUTTY, with Terminal > Keyboard > Initial state of numeric pad > Normal)
Іван Кастелланос,

3

На моєму Mac OSX El Capitan ключ періоду ^[0nзамість ^[01. Також у мене є бездротова клавіатура Logitech для Mac, і вона має =знак на цифровій панелі. Моє остаточне відображення виглядає нижче:

# 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 для доступу до сервера Linux на SSH і клавіатура працює добре з 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 І я пояснюю контекст і як використовувати ці коди, що краще, ніж ця відповідь.
Габріель Хацлокк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.