zsh(zシェル)numpad / numlockが機能しない


46

zsh / oh-my-zshにアップグレードしました。ほとんどすぐに、10桁のテンキーが機能していないことに自分のマシンで気付きます。それはバッシュとフィッシュシェルで働いていました。

奇妙なことに、fn /ファンクションキーを押したままにすると、numlockのように機能しますが、「ロック」されず、fnを押し続けて数字を入力する必要があります。

アイデアはありますか?

回答:


89

テンキーは、一番上の行の「通常の」数字キーと同じキーシンボルを送信しません。例:numpad-1-keyは送信しますKP_1が、1-keyは単に送信します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-stringout-stringます。in-string入力された場合はout-stringプッシュバックされ、入力として扱われます。

実際のコード(たとえば^[Oq)は、システムによって異なる場合があります。Ctrl+ を押してvから問題のキーを押すと、端末のコードを取得できます。


3
ありがとうございます、これは私にとって完璧に機能し、Ctrl+のvヒントは素晴らしいです!
BradGreens

1
おかげで、これは本当に役に立ちましたが、Apple USBキーボードにはいくつかのキーがありませんでした。これは、Apple Keyboardのキーバインディングです:#キーパッド#0。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" "

このためのマニュアルgnu.org/software/screen/manual/html_node/...
krowe

これはあまりにも良いです:stackoverflow.com/questions/18042685/...
krowe

github.com/krowe/kshrc-k800-keybindingsこの回答に基づいて作成しました。
クロー14

16

@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" "/"
bindkey -s "^[OX" "="

1
ロビン、あなたの答えを拡大して、OPが問題を修正するためにこの情報を入力する場所を含めてください。
music2myear 14年

2
これは+(使用する必要がありましたbindkey -s "^[Ok" "+")と=(欠落しているbindkey -s "^[OX" "=")を除いて私のために働いた
-dain

4

@adaephonからの回答も補完します。デルのデスクトップに使用しなければならなかったものがあります。.zshrcファイルに追加するだけです。

(ところで、すべての回答からバインディングを追加することはできません。キーごとに1つのバインディングが必要です)

# 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

スーパーユーザーへようこそ!答えを編集して、これが何であり、どのように/どこで使用するかについての小さなガイダンスを含めてください。
Excellll

(とPUTTY、窓キーパッドとzshのために私のために働いたこのソリューションTerminal > Keyboard > Initial state of numeric pad > Normal
イワンCastellanosの

3

Mac OSX El Capitanでは、ピリオドキーはの^[0n代わりになり^[01ます。また、Mac用のLogitechワイヤレスキーボードがあり=、テンキーにもサインがあります。最終的なマッピングは次のようになります。

# 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を使用してSSH上のLinuxサーバーにアクセスし、キーパッドが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

これで、キーパッドは期待どおりに動作するはずです!


これにより別の回答が複製され、新しいコンテンツは追加されません。実際に何か貢献できるものがない限り、回答を投稿しないでください。
デビッドポスティル

私は同意しません。この答えだけに同様のコードがあります:superuser.com/a/907695/351420 そして、私はこの答えよりも良いコンテキストとそれらのコードを使用する方法を説明します。
ガブリエルHautclocq
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.