pecoは標準入力をインクリメンタルサーチ可能にして選択した結果を標準出力に返すコマンドです。
OSX10.10.1, CentOS6.6, Ubuntu14.04, Windows8にpecoを入れてみました。
OSX 10.10.1
brewでインストールできます。
$ brew tap peco/peco
$ brew install peco
$ which peco
/usr/local/bin/peco
使ってみます。
$ ls -l | peco
$ ps aux | peco
CentOS 6.6
$ cat /etc/system-release
CentOS release 6.6 (Final)
goの環境がなくて go get できなくても binary を配置すれば良い。
CPUアーキテクチャや最新のversionはここで確認します。
$ wget https://github.com/peco/peco/releases/download/v0.2.11/peco_linux_386.tar.gz
$ tar xvzf peco_linux_386.tar.gz
$ cd peco_linux_386
$ ln -s peco /usr/local/bin/
Ubuntu 14.04
基本的にcentosと同じですが, binaryではなくてgo getでインストールしてみます。
$ cat /etc/debian_version
jessie/sid
$ which go
/usr/bin/go
$GOPATH以下にインストールされます。
$ go get github.com/peco/peco/cmd/peco
$ which peco
$GOPATH/bin/peco
Windows8
コマンドプロンプトで使う場合はbinaryを持ってくるのが一番早いです。C:\Windows\System32 にexeを配置します。
pecoを使ったBATファイルの例は探すといくつか見つかります。
cygwin環境にpecoを入れます。
pathが通っていてバージョンも確認できますが,pipeで繋ぐところのI/Oで上手くいっていないのか入力待ち状態になってしまいます。文字コードの違いが原因の可能性もあります。
$ which peco
/usr/bin/peco
$ peco --version
peco: v0.2.11
$ ls -l | peco
.bashrc
いろんな情報を参考にして.bashrcはOSX, Linuxで以下のようにしています。
OSXだけ標準出力に上手くできなかったので結果を ${READLINE_LINE} で即時実行してしまっているので, 実行したいコマンドが見つからない場合は, escしないといけない微妙な感じ。
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}
# for OSX
if [ `uname` = "Darwin" ]; then
${READLINE_LINE}
fi
}
bind -x '"\C-r": peco-select-history'
# peco + cd
function pcd {
local dir="$( find . -maxdepth 1 -type d | sed -e 's;\./;;' | peco )"
if [ ! -z "$dir" ] ; then
cd "$dir"
fi
}
pecoでCtrl + r によるコマンド履歴の検索が快適になりました。