zsh (z shell) numpad / numlock не работает

46

Я только что обновился до zsh / oh-my-zsh. Почти сразу я замечаю на своей машине, что десятизначная цифровая клавиатура не работает. Он работал в bash и fish shell.

Как ни странно, если я удерживаю нажатой клавишу fn / function, она действует как numlock и работает, но не блокируется, и мне придется продолжать удерживать fn, чтобы набирать цифры.

Есть идеи?

BradGreens
источник

Ответы:

89

Цифровые клавиши не отправляют те же символы клавиш, что и «обычные» цифровые клавиши в верхнем ряду. Например: ключ numpad-1 отправляет, KP_1а ключ 1 просто отправляет 1.

Некоторые терминалы автоматически переназначают ключ numpad для отправки тех же кодов в оболочку. Кроме того, некоторые оболочки (например 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а затем соответствующую клавишу, чтобы получить код для вашего терминала.

Adaephon
источник
3
Спасибо, сэр, это отлично сработало для меня и Ctrl+ vсовет отличный!
BradGreens
1
Спасибо, это было действительно полезно, но некоторые клавиши отсутствовали на клавиатуре Apple USB. Это связывание клавиш для Apple Keyboard: # Keypad # 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
и это тоже хорошо: stackoverflow.com/questions/18042685/…
krowe
github.com/krowe/kshrc-k800-keybindings Сделано это на основе этого ответа.
Кроу
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 должен ввести эту информацию, чтобы исправить их проблему?
music2myear
2
Это работало для меня, за исключением +(пришлось использовать bindkey -s "^[Ok" "+") и =(отсутствует bindkey -s "^[OX" "=")
Дейн
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
Это решение работало для меня Zsh с клавиатурой Windows (PUTTY, с 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 И я объясняю контекст и как использовать эти коды, imho лучше, чем этот ответ.
Габриэль Хаутлок