2014-05-13

zsh にて ESC-k の動作を bash と同じにする

Viモードのbashにて ESC-k を押すと, 一つ前の履歴に戻り, カーソルが行頭にゆく. zshでも同様に一つ前の履歴に戻るが, カーソルが行末に行く. この振舞の違いでzshを使うことをためらっていたのだけれど, 変更できないかと調べてみた.

以下の2行を~/.zshrcに記述すれば良いことが分かった.

function up-history-first { zle up-history ; zle vi-first-non-blank }
zle -N up-history-first
bindkey -a 'k' up-history-first
1行目で「一つ前の履歴に戻り, カーソルを行頭に移動する」関数を定義する. 2行目で, その関数をZLE (Zsh Line Editor) のウィジットとして登録する. 3行目で, Viコマンドモードでのキー「k」を先ほど登録したウィジットに割り当てる.

.zshrcはzshが対話モードで起動した場合に読み込まれる. 対話モードでないときには読み込まれないのでちょうど良い.