zsh (shell z) pavé numérique / pavé numérique ne fonctionne pas

46

Je viens de passer à zsh / oh-my-zsh. Presque immédiatement, je remarque sur ma machine que le pavé numérique à 10 chiffres ne fonctionne pas. Il travaillait à bash et à la coquille de poisson.

Bizarrement, si je maintiens la touche fn / function enfoncée, elle agit comme un numlock et fonctionne, mais elle ne se "verrouille" pas et je devrais continuer à maintenir la touche fn enfoncée pour taper les chiffres.

Des idées là-bas?

BradGreens
la source

Réponses:

89

La touche du pavé numérique n'envoie pas les mêmes symboles que la touche numérique 'normale' dans la rangée supérieure. Par exemple: le pavé numérique pavé-1 envoie KP_1tandis que le pavé numérique envoie seulement 1.

Certains terminaux remappent automatiquement la touche du pavé numérique pour envoyer les mêmes codes au shell. De plus, certains shells (par exemple bash) interprètent simplement les touches du pavé numérique comme leurs équivalents dans le bloc principal.

zshne fait pas le mappage automatiquement, mais vous pouvez le bindkeyfaire vous-même. J'ai les éléments suivants dans mon ~/.zshrcpour faire fonctionner le clavier:

# 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-stringse lie in-stringà out-string. Si in-stringest tapé, out-stringest repoussé et traité comme une entrée.

Les codes réels (par exemple ^[Oq) peuvent être différents sur votre système. Vous pouvez appuyer sur Ctrl+ vsuivi de la touche en question pour obtenir le code de votre terminal.

Adaephon
la source
3
Merci monsieur, cela a parfaitement fonctionné pour moi et le Ctrl+ vtip est génial!
BradGreens
1
Merci, c'était vraiment utile, mais il manquait quelques clés pour le clavier USB Apple. Ceci est la liaison de clé pour Apple Keyboard: # Keypad # 0. Entrez bindkey -s "^ [Op" "0" bindkey -s "^ [On" "." bindkey -s "^ [OM" "^ M" # 1 2 3 bindkey -s "^ [Oq" "1" bindkey -s "^ [ou" 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" "
et c'est bien aussi: stackoverflow.com/questions/18042685/…
krowe
github.com/krowe/kshrc-k800-keybindings Cet argument est basé sur cette réponse.
Krowe
16

Pour compléter la réponse donnée par @adaephon, voici les liaisons correctes pour le clavier USB Apple (A1243). Ceux-ci doivent être ajoutés à ~/.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
la source
1
Robin, pourriez-vous élargir votre réponse pour inclure l'endroit où OP devrait saisir ces informations pour corriger son problème?
music2myear
2
Cela a fonctionné pour moi sauf +(devait utiliser bindkey -s "^[Ok" "+") et =(manquant bindkey -s "^[OX" "=")
dain
4

Complète également la réponse de @adaephon. Voici ce que je devais utiliser pour mon ordinateur de bureau Dell, pourrait être utile. Ajoutez-le simplement dans votre fichier .zshrc.

(BTW n’ajoutez pas de liens de toutes les réponses, vous devriez juste avoir un lien par clé)

# 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
la source
Bienvenue sur Super User! Pourriez-vous modifier votre réponse pour inclure un peu d'indication sur ce que c'est et comment / où l'utiliser?
Excellll
Cette solution a fonctionné pour moi pour zsh avec clavier Windows (PATE, avec Terminal > Keyboard > Initial state of numeric pad > Normal)
Ivan Castellanos
3

Sur mon Mac OSX El Capitan, la clé de période est la ^[0nplace de ^[01. De plus, j'ai un clavier sans fil Logitech pour Mac et un =pavé numérique sur le pavé numérique. Ma cartographie finale ressemble à celle ci-dessous:

# 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 solution proposée par d'autres fonctionne toutefois correctement.

M. Doomsbuster
la source
1

Si vous utilisez Kitty pour accéder à un serveur Linux sur SSH et que le clavier fonctionne correctement avec Bash mais pas avec ZSH, vous pouvez essayer d'ajouter les éléments suivants dans votre ~/.zshrcfichier de configuration:

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

Sauver. Déconnectez-vous et reconnectez-vous pour recharger la configuration ZSH. Vous pouvez également saisir les informations suivantes dans votre terminal:

. ~/.zshrc

Le clavier devrait maintenant fonctionner comme prévu!

Gabriel Hautclocq
la source
Cela duplique une autre réponse et n’ajoute aucun nouveau contenu. S'il vous plaît, ne postez pas de réponse sauf si vous avez réellement quelque chose de nouveau à contribuer.
DavidPostill
Laisse moi être en désaccord. Seule cette réponse a des codes similaires: superuser.com/a/907695/351420 Et j'explique le contexte et comment utiliser ces codes, à mon humble avis, mieux que cette réponse.
Gabriel Hautclocq