zsh (z shell) numpad / numlock funktioniert nicht

46

Ich habe gerade ein Upgrade auf zsh / oh-my-zsh durchgeführt. Fast sofort bemerke ich auf meinem Computer, dass das 10-stellige Nummernfeld nicht funktioniert. Es funktionierte in Bash und Fish Shell.

Merkwürdigerweise verhält es sich, wenn ich die Fn / Funktionstaste gedrückt halte, wie eine Num-Taste und funktioniert, aber es "sperrt" nicht, und ich müsste die Fn-Taste gedrückt halten, um die Zahlen einzugeben.

Irgendwelche Ideen da draußen?

BradGreens
quelle

Antworten:

89

Die Zifferntasten senden nicht die gleichen Tastensymbole wie die 'normale' Zifferntaste in der oberen Reihe. Zum Beispiel: Die Zifferntasten-1-Taste sendet, KP_1während die 1-Taste nur sendet 1.

Einige Terminals ordnen die Zifferntasten automatisch neu zu, um dieselben Codes an die Shell zu senden. Außerdem bashinterpretieren einige Shells (zum Beispiel ) die Zifferntasten wie ihre Entsprechungen im Hauptblock.

zshführt das Mapping nicht automatisch durch, Sie können bindkeyes jedoch selbst durchführen. Ich habe Folgendes in meinem ~/.zshrc, um die Tastatur zum Laufen zu bringen:

# 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-stringbindet in-stringan out-string. Wenn in-stringeingegeben out-stringwird, wird es zurückgeschoben und als Eingabe behandelt.

Die tatsächlichen Codes (zum Beispiel ^[Oq) können auf Ihrem System unterschiedlich sein. Sie können Ctrl+ vgefolgt von der betreffenden Taste drücken, um den Code für Ihr Terminal abzurufen.

Adaephon
quelle
3
Vielen Dank, Sir, das hat bei mir perfekt geklappt und der Ctrl+ vTipp ist super!
BradGreens
1
Danke, das war wirklich nützlich, aber einige Tasten für die Apple USB-Tastatur fehlten. Dies ist die Tastenbelegung für die Apple-Tastatur: # Keypad # 0. Geben Sie bindkey -s "^ [Op" "0" bindkey -s "^ [On" "ein." bindkey -s ^ [OM ^ M # 1 2 3 bindkey -s ^ [Oq 1 bindkey -s ^ [Oder 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" "
und das ist auch gut: stackoverflow.com/questions/18042685/…
krowe
github.com/krowe/kshrc-k800-keybindings Gestützt auf diese Antwort.
Krowe
16

Um die Antwort von @adaephon zu vervollständigen, sind die folgenden Angaben für die Apple USB-Tastatur (A1243) richtig. Diese müssen hinzugefügt werden ~/.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
quelle
1
Robin, könnten Sie Ihre Antwort dahingehend erweitern, wo OP diese Informationen eingeben sollte, um das Problem zu beheben?
music2myear
2
Dies funktionierte für mich außer +(musste verwenden bindkey -s "^[Ok" "+") und =(fehlt bindkey -s "^[OX" "=")
Dain
4

Ergänzt auch die Antwort von @adaephon. Hier ist, was ich für meinen Dell Desktop verwenden musste, möglicherweise hilfreich. Fügen Sie es einfach in Ihre .zshrc-Datei ein.

(Übrigens, fügen Sie keine Bindungen aus allen Antworten hinzu, Sie sollten nur eine Bindung pro Schlüssel haben.)

# 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
quelle
Willkommen bei Super User! Könnten Sie bitte Ihre Antwort so bearbeiten , dass sie eine kurze Anleitung dazu enthält, was dies ist und wie / wo Sie es verwenden sollen?
Hervorragend
Diese Lösung funktionierte für mich für zsh mit Windows-Tastatur (PUTTY, mit Terminal > Keyboard > Initial state of numeric pad > Normal)
Ivan Castellanos
3

Auf meinem Mac OS X El Capitan lautet ^[0nder Punktschlüssel statt ^[01. Außerdem habe ich eine Logitech-Tastatur für den Mac =, auf der sich auch ein Nummernblock befindet. Meine endgültige Zuordnung sieht wie folgt aus:

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

Die von anderen vorgeschlagene Lösung funktioniert jedoch ordnungsgemäß.

Mr. Doomsbuster
quelle
1

Wenn Sie Kitty für den Zugriff auf einen Linux-Server unter SSH verwenden und die Tastatur mit Bash, aber nicht mit ZSH einwandfrei funktioniert, können Sie versuchen, Folgendes in Ihre ~/.zshrcKonfigurationsdatei aufzunehmen:

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

Speichern. Melden Sie sich ab und erneut an, um die ZSH-Konfiguration neu zu laden. Alternativ können Sie Folgendes in Ihr Terminal eingeben:

. ~/.zshrc

Die Tastatur sollte nun wie erwartet funktionieren!

Gabriel Hautclocq
quelle
Dies dupliziert eine andere Antwort und fügt keinen neuen Inhalt hinzu. Bitte posten Sie keine Antwort, es sei denn, Sie haben tatsächlich etwas Neues beizutragen.
DavidPostill
Lass mich nicht zustimmen. Nur diese Antwort hat ähnliche Codes: superuser.com/a/907695/351420 Und ich erkläre den Kontext und die Verwendung dieser Codes, imho besser als diese Antwort.
Gabriel Hautclocq