FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

percol(コマンドライン版Anything)のススメ

こんにちは@toshikimiyagawaです。
2012年も大晦日。
今年は個人的には結婚という大きな節目を迎えたこともあり、いろいろあったなという印象です。
来年は新年早々結婚式と引越し(予定)というイベントも控えており、今は大忙し。

さて、久しぶりの投稿はここ半年くらい個人的に便利に利用させて頂いているソフトウェアの紹介をしたいと思います。
f:id:taketor:20150722152641p:plain

私は普段Emacsをメインのエディタとしています。
その中でもAnythingは非常に重宝しています。
Anythingを利用していると普段のコマンドラインでも使えないかなと思ってしまいます。
そんな中出会ったのがこのpercolというソフトウェア。
コマンドライン版Anythingとでも言うべきソフトウェアで、シェルの履歴やtmuxのタブなどを一覧で表示したり絞込みしたりできます。
インストールとか簡単な使い方はこちら記事がわかりやすいので参考にしていただくとして、
本記事では私の使い方の例を紹介したいと思います。

最も利用している場面はシェルの履歴表示の場面です。
C-rを置き換えてpercolのインターフェース上で表示しています。
先ほどの記事にも上げられていますが、これは便利です。
シェルの履歴を複数キーワードで検索できます。
下記の関数を.zshrcに書いています。

function percol_select_history() {
  local tac_cmd
  which gtac &> /dev/null && tac_cmd=gtac || tac_cmd=tac
  BUFFER=$(history 1 | sed 's/^ *[0-9]* *\*\? *//' | $tac_cmd  \
    | awk '!x[$0]++{if($0!~/^(cd|mv|ls)( .*)?$/){print $0}}' | percol --match-method migemo --query "$LBUFFER")
  CURSOR=$#BUFFER         # move cursor
  zle -R -c               # refresh
}

zle -N percol_select_history
bindkey '^R' percol_select_history


その他にもzshからリモートのSSHmysqlにつなぐときなどにpercolのインターフェースを利用しています。
C-jで接続先一覧が出てきて、percolのインターフェース上から選択し、接続するという使い方をしています。
こちらについては次回紹介しようと思います。

それでは良いお年を〜