Zsh
oh-my-zsh
Peco

【zsh】まだhistoryで消耗してるの?コマンド履歴検索が捗るpecoの設定方法【oh-my-zsh】

普段コマンド履歴を遡りたいときは、
history
と打つか、
ctrl + r
だと思うのですが、
これらを更に使いやすくする方法があってそれがかなり便利だったので紹介させてください。

環境はMacです。

設定後はこんな感じになる

通常の状態から、ctrl + rを押すと、

スクリーンショット 2017-12-08 15.23.57.png

と言うかたちでhistoryコマンドで表示される内容がズラッと表示されます。
この状態で↑や↓、
ctrl + p, ctrl + n
でマーカーを動かしてエンターを押すとそのコマンドがターミナルに打たれます(実行はされない)
もう一度エンターを押すとコマンド実行となるので、以前打ったコマンドを少し変えて実行したいというケースにも対応できます。

また上記のctrl + rを押した状態で検索したい文字列を入力するとそれフィルタリングしたコマンド履歴を表示してくれるのです。

また、お目当てのコマンドがすぐに見つからなかった場合、エスケープキーですぐに抜けられます。

というわけで設定の仕方です

設定方法

pecoのインストール

brew install peco
で入ります。簡単ですね。

zshrcの編集

vi ~/.zshrc
でファイルを開き、最下行あたりに以下を追記します。

function peco-history-selection() {
    BUFFER=`history -n 1 | tail -r  | awk '!a[$0]++' | peco`
    CURSOR=$#BUFFER
    zle reset-prompt
}

zle -N peco-history-selection
bindkey '^R' peco-history-selection

でOKです。

そしたら、
exec zsh -l
でzshを再起動(再ログイン)

これで、
ctrl + r
を押すと見事コマンド履歴が素敵な感じで表示されます。

fc: event not found: -n というエラーが出る場合

zshrcに書いた、

BUFFER=`history -n 1 | tail -r  | awk '!a[$0]++' | peco`

の部分を、

BUFFER=`\\history -n 1 | tail -r  | awk '!a[$0]++' | peco`

と書き換えてzshを再起動でいけるはずです。
幸せいっぱいですね。

ubuntuの場合

この記事はMac前提で書いてますが、自分用のメモとして、
Ubuntuの場合は、

BUFFER=`history -n 1 | tail -r  | awk '!a[$0]++' | peco`

BUFFER=`\\history -n 1 | tac | awk '!a[$0]++' | peco`

となります。