CentOSのbashでpecoを使ってコマンドの履歴検索を便利にする

最近話題のpecoですが、zshと組み合わせて使うことが多いようですが、便利そうなので自分の管理しているVPSサーバのCentOSにも入れてみました。

goで作られているのでインストールは簡単で、バイナリをPATHの通っている場所に置くだけです。

$ wget https://github.com/peco/peco/releases/download/v0.1.12/peco_linux_amd64.tar.gz
$ tar xvzf peco_linux_amd64.tar.gz
$ sudo cp peco_linux_amd64/peco /usr/local/bin/

.bashrcに以下を追記します。

peco-select-history() {
    declare l=$(HISTTIMEFORMAT= history | sort -k1,1nr | perl -ne 'BEGIN { my @lines = (); } s/^\s*\d+\s*//; $in=$_; if (!(grep {$in eq $_} @lines)) { push(@lines, $in); print $in; }' | peco --query "$READLINE_LINE")
    READLINE_LINE="$l"
    READLINE_POINT=${#l}
}
bind -x '"\C-r": peco-select-history'

あと、pecoを使いやすいよう、bashの履歴の設定も変えておくといいかもしれません。とりあえず.bash_profileに以下を追加してみました。

# 重複した履歴は保存しない
HISTCONTROL=ignoredups
# 履歴の保存数を増やす
HISTSIZE=50000

ログインし直すか、source ~/.bashrcすればbash標準のCtrl + rでの履歴検索がpecoを使った絞り込み検索になります。

f:id:takezoe:20151016122304p:plain

zshだといろんな場所での補完にpecoが使えて便利っぽいですが、このコマンドの履歴検索だけでも十分便利ですし、導入も簡単なのでbashを使っている人もpecoを使ってみるといいんじゃないかと思います。