サマリ
- Fn + [任意のキー] に * を割り当てていたが、入力されない
- この時にマップされているのは、テンキーの*であった
- ZSHはデフォルト設定ではテンキー入力を受け付けない
- 以下のテンキー有効化の設定を.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" "/"
問題
HHKBでFn+gを*(アスタリスク)に割り当てているが、ターミナルに入力すると以下の出力になる
$ lsOj
直前に入力されたコマンド + Oj になっている。
この場合はlsを直前に入力していたから、 ls + Oj となっている。
SHIFT + 8だと*の入力は可能なので、Fnキーとの組み合わせに問題がありそう。
環境
* Windows 10
* WSL
* UBUNTU
* zsh
解析
環境切り分け
- bashとzshで切り分け
- zshでしか発生しない
→zsh固有の問題のようだ。
- zshでしか発生しない
実際に入力されているkeyを調べる
[結論]:テンキーの*が入力されている。
-
キーコードの表示サイトを利用
http://nas6.net/keyboard.htm
入力 : Fn+g(* アスタリスクを入力)- keyIndexId:106
- keyRealID:VK_MULTIPLY
- keyAliasID:VK_No*
入力 : SHIFT + 8 = *
- keyIndexId:56
- keyRealID:VK_8
VK_MULTIPLYにはどうやらテンキーの*を表しているようだ。
再現確認
テンキーがあるキーボードで、テンキーの*を入力。
$ lsOj
再現完了。zsh + テンキー入力に問題があることが分かった。
HHKB使っているとテンキーがないから気が付かなかった。
ここまで分かればググれば解決できそう。
zsh + テンキー入力
記事があった。感謝。
https://superuser.com/questions/742171/zsh-z-shell-numpad-numlock-doesnt-work
設定ファイルに以下を入力で、テンキー有効化
# 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" "/"
効果確認
HHKBから入力してみる
$ *
解決!