pecoを使ってみよう
ターミナル検索
皆さんはターミナルでテキスト検索や文字列検索を行う際はどのようにやっていますでしょうか?
grepやfindなどの標準コマンドもありますが、いかんせん使いにくいですよね。。。
そんな問題を解決するのが今回ご紹介する「peco」です!
What’s peco?
pecoとは、標準出力のデータに対してクエリーベースで検索をかけることが出来るツールとなっています。
内部的にはGo言語で書かれています。
とりあえず、ものすごい使いやすいと言う評判しか聞かないのでインストールして使い勝手を試してみましょう!
インストール手順
Homebrewでインストール
pecoもHomebrewでのインストールが可能となっていますので、以下のコマンドでささっと導入。
$ brew install peco
以下のログが表示されればインストール完了です。
==> Downloading https://homebrew.bintray.com/bottles/peco-0.5.3.el_capitan.bottle.tar.gz
######################################################################## 100.0%
==> Pouring peco-0.5.3.el_capitan.bottle.tar.gz
🍺 /usr/local/Cellar/peco/0.5.3: 6 files, 4.5MB
確認
以下のコマンドでインストールがされているか確認しましょう。
peco --version
以下のようなログが出力されればインストールは完了です。
peco version v0.5.3 (built with go1.10)
使い方
ディレクトリの検索
では、実際にpecoを使ってみましょう。
今回は以下のディレクトリが存在する階層で動作確認をしてみます。
.
├── animals
├── books
├── foods
├── games
└── sports
以下のコマンドを入力してみてください。
ll | peco
すると、以下のような画面になると思います。

対話形式になるので、絞り込みたい文字列を入力してみましょう。
するとどんどん絞られていきますね。





前述もした通り、pecoは標準出力の結果に対するこのような操作が全てです。
また、複数キーワード対応や部分一致での絞り込みが可能なのでめちゃくちゃ便利です♪
そして、pecoの真骨頂はコマンドの組み合わせにおける効率性の向上にあります!
コマンド履歴を簡単検索
historyコマンドの結果から簡単に検索をかけて実行出来るようにしてみましょう。
zshを使っている方は以下を.zshrcに追加してターミナルを再起動してみてください。
#関数定義
function pecoHistory() {
BUFFER=`history -n 1 | tail -r | awk '!a[$0]++' | peco`
CURSOR=$#BUFFER
zle reset-prompt
}
#関数をウィジェットに追加
zle -N pecoHistory
#ウィジェットをキーバインドに追加
bindkey '^R' pecoHistory
これで^(Ctrl)Rでヒストリー検索及び実行が可能になります。

ショートカットでサクッと簡単に履歴を検索して実行出来るようになるので、対話形式で過去のコマンドを探して実行する事が出来るためgrep検索よりダントツに使いやすいです!
grepの場合は一致するキーワードをタイポすると再度コマンド打たないといけなかったり、検索結果をコピペして実行する必要があるので。。。
終わりに
このようにpecoを使った複雑なコマンドも関数として登録しておけば簡単に呼び出せるようになります。
pecoはターミナル操作を革新的に使いやすくしてくれるツールだと筆者も感じました。
使い方によって可能性は無限大なので、皆さんも是非インストールしてみてください。
