zsh (z shell) numpad / numlock nie działa

46

Właśnie uaktualniłem do zsh / oh-my-zsh. Niemal natychmiast zauważam na moim komputerze, że 10-cyfrowy numpad nie działa. Działało w skorupce i skorupce rybnej.

Dziwne, jeśli przytrzymam klawisz fn / funkcyjny, działa on jak numlock i działa, ale nie „blokuje się” i musiałbym przytrzymać klawisz fn, aby wpisać cyfry.

Jakieś pomysły?

BradGreens
źródło

Odpowiedzi:

89

Klawisz numeryczny nie wysyła tych samych symboli klawiszy, co „normalny” klawisz numeryczny w górnym rzędzie. Na przykład: Numpad-1-klawisz wysyła, KP_1podczas gdy 1-klawisz po prostu wysyła 1.

Niektóre terminale automatycznie mapują klawisz Numpad, aby wysłać te same kody do powłoki. Ponadto niektóre powłoki (na przykład bash) po prostu interpretują klawisze numeryczne podobnie jak ich odpowiedniki w bloku głównym.

zshnie wykonuje mapowania automatycznie, ale możesz użyć bindkeygo do samodzielnego mapowania. Mam następujące funkcje, ~/.zshrcaby klawiatura działała:

# 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-stringwiąże się in-stringz out-string. Jeśli in-stringjest wpisane, out-stringjest wypychane i traktowane jako dane wejściowe.

Rzeczywiste kody (na przykład ^[Oq) mogą się różnić w systemie. Możesz nacisnąć Ctrl+, va następnie odpowiedni klawisz, aby uzyskać kod swojego terminala.

Adaefon
źródło
3
Dziękuję panu, to działało idealnie dla mnie, a wskazówka Ctrl+ vjest świetna!
BradGreens
1
Dzięki, to było naprawdę przydatne, ale brakowało niektórych klawiszy do klawiatury Apple USB. To jest skrót klawiszowy dla klawiatury Apple: # Klawiatura # 0. Wpisz bindkey -s "^ [Op" "0" bindkey -s "^ [On" "." bindkey -s "^ [OM" "^ M" # 1 2 3 bindkey -s "^ [Oq" "1" bindkey -s "^ [Lub" "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" "
i to też jest dobre: stackoverflow.com/questions/18042685/…
krowe
github.com/krowe/kshrc-k800-keybindings Oparte na tej odpowiedzi.
krowe
16

Aby uzupełnić odpowiedź udzieloną przez @adaephon, poniżej podano prawidłowe powiązania z klawiaturą Apple USB (A1243). Należy je dodać do ~/.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" "="
Robin Daugherty
źródło
1
Robin, czy możesz rozszerzyć swoją odpowiedź, aby uwzględnić, gdzie OP powinien wprowadzić te informacje, aby rozwiązać swój problem?
music2myear
2
To działało dla mnie z wyjątkiem +(musiałem użyć bindkey -s "^[Ok" "+") i =(brakowało bindkey -s "^[OX" "=")
Dain
4

Uzupełnia również odpowiedź od @adaephon. Oto, co musiałem wykorzystać na swoim komputerze Dell, może być pomocne. Po prostu dodaj go do pliku .zshrc.

(BTW nie dodaje powiązań ze wszystkich odpowiedzi, powinieneś mieć tylko jedno powiązanie na klucz)

# 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
Daniel Bermudez
źródło
Witamy w Super User! Czy możesz zredagować swoją odpowiedź, aby zawierała krótkie wskazówki na temat tego, co to jest i jak / gdzie z niej skorzystać?
Excellll,
To rozwiązanie działało dla mnie dla Zsh z klawiaturą Windows (PUTTY, z Terminal > Keyboard > Initial state of numeric pad > Normal)
Ivan Castellanos
3

W moim Mac OSX El Capitan ^[0nzamiast tego jest kropka ^[01. Mam także bezprzewodową klawiaturę Logitech dla komputerów Mac i ma ona również =znak na klawiaturze numerycznej. Moje ostateczne mapowanie wygląda jak poniżej:

# 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" "="

Rozwiązanie zaproponowane przez innych działa jednak poprawnie.

Pan Doomsbuster
źródło
1

Jeśli używasz Kitty, aby uzyskać dostęp do serwera Linux na SSH i że klawiatura działa poprawnie z Bash, ale nie z ZSH, możesz spróbować dodać następujące elementy w ~/.zshrcpliku konfiguracyjnym:

# 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" "/"

Zapisać. Wyloguj się i zaloguj ponownie, aby ponownie załadować konfigurację ZSH, lub alternatywnie możesz wpisać w terminalu:

. ~/.zshrc

Klawiatura powinna teraz działać zgodnie z oczekiwaniami!

Gabriel Hautclocq
źródło
To powiela inną odpowiedź i nie dodaje żadnej nowej treści. Nie publikuj odpowiedzi, chyba że masz coś nowego do dodania.
DavidPostill
Pozwól mi się nie zgodzić. Tylko ta odpowiedź ma podobne kody: superuser.com/a/907695/351420 I wyjaśniam kontekst i sposób korzystania z tych kodów, imho lepiej niż ta odpowiedź.
Gabriel Hautclocq