vorfee's Tech Blog

Just another tech blog

zshのキーバインドで使用できるキーを増やす

zshキーバインドで使用できるキーを増やすには、zkbdを使用する。

zkbdの読み込み

zkbdを利用するには以下のコマンドを使用する。

typeset -fuz zkbd

これでzkbdコマンドが使用できるようになる。

zkbdの設定

キーバインドで使用できるキーを増やすためにはキー定義ファイルを作成しなければならない。

zkbdでは対話的にキー定義ファイルを作成できる。

zkbdコマンドを実行

zkbdコマンドを実行して、キー定義ファイルを作成する。

zkbd

ターミナルの種類を設定

はじめにターミナルの種類を聞かれる。デフォルトで変数$TERMの値がセットされているのでそのままEnterを押す。

Enter current terminal type: [xterm-256color]

キーを入力

まずはじめに説明が表示されるのだが、英語である。

We will now test some features of your keyboard and terminal. If you do not press the requested keys within 10 seconds, key reading will abort. If your keyboard does not have a requested key, press Space to skip to the next key.

Hold down Ctrl and X:

適当に訳すと、「10秒以内に要求したキーを押さないと処理は中断される。指定されたキーが存在しない場合はスペースキーを押すことでスキップできる。」といった感じである。

Ctrl + x を入力

さっきの説明の一番下に「Hold down Ctrl and X:」と出ているので、Ctrlキーとxキーを押す。

Hold down Ctrl and press X:

Meta + x を入力

Hold down Meta and press X:と出るので、windowsキーとxキーを押す。MacBookにはwindowsキーが無いのでCmdキーを押した。

Your Meta key may have a Microsoft Windows logo on the cap.
Hold down Meta and press X:

Alt + x を入力

Hold down Alt and press X:と出るので、Altキーとxキーを押す。MacBookにはAltキーが無いのでSpaceキーを押した。

Hold down Alt and press X:

作業説明:1

.zshrcbindkey -mを追記しろと言っている。aで次に進む。

You may enable keybindings that use the key by adding

bindkey -m

to your /Users/vorfeeProBook/dot/zsh/.zshrc file.

Press a key to proceed:

作業説明:2

いろんなキーを押してもらうけど焦って次のキーを押さないで!と言っている。aで次に進む。

You will now be asked to press in turn each of the 12 function keys, then the Backspace key, the 6 common keypad keys found on typical PC keyboards, plus the 4 arrow keys, and finally the Menu key (near Ctrl on the right). If your keyboard does not have the requested key, press Space to skip to the next key. Do not type ahead! Wait at least one second after pressing each key for zsh to read the entire sequence and prompt for the next key. If a key sequence does not echo within 2 seconds after you press it, that key may not be sending any sequence at all. In this case zsh is not able to make use of that key. Press Space to skip to the next key.

Press a key when ready to begin:

大量のキーを入力

言われたとおりに入力する。

定義ファイルを読み込む

.zshrcに下記を追加する。

if [[ -f $ZDOTDIR/.zkbd/$TERM-${${DISPLAY:t}:-$VENDOR-$OSTYPE} ]]; then
    source $ZDOTDIR/.zkbd/$TERM-${${DISPLAY:t}:-$VENDOR-$OSTYPE}
fi

実際にbindkeyする

お好きなように.zshrcに追加する。

以下に例を示す。

[[ -n "${key[Home]}"   ]] && bindkey "${key[Home]}"   begining-of-line
[[ -n "${key[End]}"    ]] && bindkey "${key[End]}"    end-of-line
[[ -n "${key[Insert]}" ]] && bindkey "${key[Insert]}" overwrite-mode
[[ -n "${key[Delete]}" ]] && bindkey "${key[Delete]}" delete-char

どんなキー定義があるかは作成した定義ファイルを見るとわかる。keyという名前の連想配列で定義されている。

bindkeyについてはZLEZsh Line Editor)のマニュアルを参照するといい。

参照

zle:bindkeys [ZshWiki]

zsh: 18 Zsh Line Editor