私は最近、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