38

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

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

Есть идеи?

5 ответов5

79

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

13

Чтобы завершить ответ, который дал @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" "/"
3

Также дополняю ответ от @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
1

На моем 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

Теперь клавиатура должна работать как положено!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .