zsh (z shell) numpad / numlock non funziona


46

Ho appena aggiornato a zsh / oh-my-zsh. Quasi immediatamente noto sul mio computer che il tastierino numerico a 10 cifre non funziona. Funzionava in bash e conchiglie di pesce.

Stranamente, se tengo premuto il tasto fn / funzione, si comporta come un blocco numerico e funziona, ma non si "blocca" e dovrei tenere premuto fn per digitare i numeri.

Qualche idea là fuori?

Risposte:


89

Il tasto del tastierino numerico non invia gli stessi simboli del tasto numerico "normale" nella riga superiore. Ad esempio: il tastierino numerico-1 invia KP_1mentre il tasto 1 invia 1.

Alcuni terminali rimappano automaticamente il tasto del tastierino numerico per inviare gli stessi codici alla shell. Inoltre, alcune shell (per esempio bash) interpretano semplicemente i tasti del tastierino numerico come i loro equivalenti nel blocco principale.

zshnon esegue automaticamente la mappatura, ma è possibile utilizzare bindkeyper eseguire la mappatura da soli. Ho il seguente nel mio ~/.zshrcper far funzionare la tastiera:

# 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-stringsi lega in-stringa out-string. Se in-stringdigitato out-stringviene respinto e trattato come input.

I codici effettivi (ad esempio ^[Oq) potrebbero essere diversi sul sistema in uso. Puoi premere Ctrl+ vseguito dal tasto in questione per ottenere il codice per il tuo terminale.


3
Grazie signore, questo ha funzionato perfettamente per me e il Ctrl+ vsuggerimento è fantastico!
BradGreens,

1
Grazie, questo è stato davvero utile ma mancavano alcuni tasti per la tastiera USB di Apple. Questa è l'associazione dei tasti per la tastiera Apple: # Keypad # 0. Immettere bindkey -s "^ [Op" "0" bindkey -s "^ [On" "." bindkey -s "^ [OM" "^ M" # 1 2 3 bindkey -s "^ [Oq" "1" bindkey -s "^ [O" "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" "


e questo è un bene troppo: stackoverflow.com/questions/18042685/...
krowe

github.com/krowe/kshrc-k800-keybindings Fatto questo sulla base di questa risposta.
Krowe,

16

Per completare la risposta fornita da @adaephon, i seguenti sono i collegamenti corretti per la tastiera USB di Apple (A1243). Questi devono essere aggiunti a ~/.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
Robin, potresti espandere la tua risposta per includere dove OP dovrebbe inserire queste informazioni per correggere il loro problema?
music2myear,

2
Questo ha funzionato per me tranne +(dovuto usare bindkey -s "^[Ok" "+") e =(mancante bindkey -s "^[OX" "=")
dain

4

Completa anche la risposta di @adaephon. Ecco cosa ho dovuto usare per il mio Dell Desktop, potrebbe essere di aiuto. Aggiungilo nel tuo file .zshrc.

(A proposito, non aggiungere associazioni da tutte le risposte, dovresti avere solo un'associazione per chiave)

# 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

Benvenuto in Super User! Potresti modificare la tua risposta per includere una piccola guida su cosa sia e come / dove usarla?
Eccellente il

Questa soluzione ha funzionato per me per zsh con tastiera Windows (PUTTY, con Terminal > Keyboard > Initial state of numeric pad > Normal)
Ivan Castellanos

3

Sul mio Mac OSX El Capitan, la chiave del periodo è ^[0ninvece di ^[01. Inoltre ho una tastiera wireless Logitech per Mac e ha anche un =segno sul tastierino numerico. La mia mappatura finale appare come di seguito:

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

La soluzione proposta da altri funziona comunque correttamente.


1

Se usi Kitty per accedere a un server Linux su SSH e se la tastiera funziona bene con Bash ma non con ZSH, puoi provare ad aggiungere quanto segue nel tuo ~/.zshrcfile di configurazione:

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

Salvare. Disconnettersi e accedere nuovamente per ricaricare la configurazione ZSH, oppure in alternativa è possibile digitare quanto segue nel terminale:

. ~/.zshrc

La tastiera ora dovrebbe funzionare come previsto!


Questo duplica un'altra risposta e non aggiunge nuovi contenuti. Per favore, non pubblicare una risposta a meno che tu non abbia effettivamente qualcosa di nuovo da contribuire.
DavidPostill

Vorrei essere in disaccordo. Solo questa risposta ha codici simili: superuser.com/a/907695/351420 E spiego il contesto e come usare quei codici, meglio di questa risposta.
Gabriel Hautclocq,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.