私は最近、robbyrussell の oh-my-zsh を使って zsh に切り替えました。それまでは bash を使っていましたが、zsh は「賢くなりすぎた」という理由で、一つだけ足りないものがあります
git commit と入力してから ↑ を入力すると、zsh は最近の git コマンドをすべて処理します。しかし、私が本当に欲しいのは、git commit で始まるすべてのコマンド (git だけではありません) を処理することです
(oh-my-)zshでこの動作を実現するにはどうすればいいですか?
50 Patrick Oscity 2012-04-27
ZSH documentationに問題の解決策がありました。Oh-my-zshは↑と↓キーを次のようにマッピングしているようです
bindkey '\e[A' history-search-backward
bindkey '\e[B' history-search-forward
これにより、上で説明した通りの動作が得られます。ZSHドキュメントでは、history-search-backwardの動作を次のように記述しています
バッファ内の最初の単語から始まる行を履歴内で後方に検索します
代わりに欲しかったのは、次のようなマッピングで、~/.zshrcの中に挿入しました
bindkey '\e[A' history-beginning-search-backward
bindkey '\e[B' history-beginning-search-forward
history-beginning-search-backwardの動作は以下の通りです
現在の行から始まってカーソルまでの行を履歴の中で前方に検索します。これにより、カーソルは元の位置に戻ります
また、\e[Aが上下の矢印に効かない場合は、^[OAを与える別のターミナルで<ctrl-v><KEY (e.g., up arrow)>を押してください。そうすれば、\e[Aの代わりにこれを使うことができます。その処理はこちらに書いてあります。http://zshwiki.org/home/zle/bindkeys
70 Patrick Oscity 2012-04-29
oh-my-zshをインストールした状態でzshでも同じ動作をさせたかったのですが、プラグインhistory-substring-searchを見つけました
私の~/.zshrcにプラグインを追加することで、上記と同じ動作を実現しました
plugins=(git brew npm history-substring-search)
この質問が出た時には、このプラグインは存在していなかったと思います。ただ、同じことを実現するための別の方法です
12 dcusan 2014-11-17

