pecoなしじゃ開発できない!ターミナルの検索を快適にしてくれるpecoの紹介

シェル

こんにちは。Webエンジニアの仁科(@nishina555)です。

今回はターミナルの作業効率化の話です。

みなさんpecoというコマンドをご存知でしょうか?
pecoを利用するとターミナルの作業効率が一気にあがります。

例えば、過去に実行したコマンドを再実行したい場合どうしますか?
一般的な方法はhistory | grep xxxというコマンドを叩いて履歴を検索する方法でしょう。

しかし、pecoを使えばこんな感じでサクサク検索できます。
pecoの検索の様子

これはpecoを使った一例にすぎません。
今回は、ターミナルでの検索を圧倒的に効率化してくれるpecoの紹介をしたいと思います。

pecoを使えばインクリメンタルサーチができるようになる

pecoは一覧結果のインクリメンタルサーチ(入力に応じて候補を絞り込む検索方法)を実現してくれるツールです。

Macであればbrew install pecoでインストールをすることができます。

pecoの使い方ですが、history | pecoのように、一覧結果をpecoに渡すことで絞り込み検索が可能となります。

pecoは一覧を絞り込み検索するという汎用的な機能のため様々な応用ができます。
例えば、find . | pecoでカレントディレクトリ以下のファイル一覧を絞り込み検索できます。
他にはps aux | peco でプロセスを絞り込むこともできます。

pecoをバインドキーに割り当ててコマンド履歴検索を使いやすくする

自分が実際に開発業務でよく利用しているpecoの事例を紹介したいと思います。
それが、バインドキーを利用したコマンドの履歴検索です。

コマンドの履歴はhistory | grepで行えます。もしくは、Ctrl + rを利用することでコマンド履歴のインクリメンタルサーチが可能です。

しかし、標準で用意されているインクリメンタルサーチよりも、pecoを利用したもののほうが使いやすいので僕(@nishina555)はCtrl + rにpecoを利用したユーザー関数を割り当てています。

シェルの設定ファイルは以下になります。
ソースコードは『bash/zsh のヒストリをpecoで便利にする』を参考にさせてもらいました。こちらのリンクにはzshとbashそれぞれの設定ファイルのソースコードが記載されています。

今回は僕がzshを利用しているので、zshのソースコードをのみ解説をします。

.zshrc

peco-select-history() {
    BUFFER=$(history 1 | 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 "$LBUFFER")
    CURSOR=${#BUFFER}
    zle reset-prompt
}
zle -N peco-select-history
bindkey '^r' peco-select-history

上記の設定を追加することでCtrl+rのバインドキーにユーザー関数(ここではpeco-select-history)を割り当てることができます。

history | pecoでもいいのですが、peco-select-historyでは『履歴の重複をなくす』、『履歴を逆順で表示させる』など、履歴一覧が使いやすくなる工夫がされています。

ソースコードについて簡単にですが解説をします。

バインドキーにユーザー関数を割り当てるにあたり、ZLE(Zsh Line Editor )と呼ばれるzshの持つコマンドライン編集機能を利用しています。

ZlEではウィジェットという単位でコマンド操作が登録されており、ウィジェットをバインドキーで呼び出すことでコマンド操作が行えます。

zle -N peco-select-history にあたる部分がウィジェットの登録です。1

そして、ウィジェットに登録されたpeco-select-historyとバインドキーをbindkey '^r' peco-select-historyで紐付けています。
これで、Ctr+rでユーザー関数を呼び出すことができます。

まとめ

以上でターミナルで一覧結果を検索をする際に便利なツール、pecoの紹介を終わります。

pecoは色々な応用がきくので、例えばpecoを利用した便利なコマンドを集めたcool-pecoと呼ばれるツールも開発されています。

pecoのほかに、ghq、hubというコマンドを組み合わせるとGitを利用した開発が爆速になります!
詳細は『知らないと損?Git操作が捗るhub, ghq, pecoの紹介【実例付き】』の記事で紹介しているので興味のある方はご覧になってください。

知らないと損?Git操作が捗るhub, ghq, pecoの紹介【実例付き】

pecoを導入すると見違えるほど作業効率があがるのでぜひ試してみてはいかがでしょうか。

この記事がいいなと思いましたらツイッター(@nishina555)のフォローもよろしくお願いします!