Kazuho’s Weblog: コマンド一発でソースコード検索&表示できる「peco」改が凄い!
を見て、導入して見ました。
すでにmasterにmergeされていますので、brewで入れている人はupgradeで更新できます。
時々ack使って検索して、別terminalで該当ソースの確認するみたいなことやっていましたが、それらがコマンド1個で完結できるようにpecoに機能追加されています。
上記で紹介されている pero というwrapperを見るとわかりやすいです。
#! /bin/sh exec ack "$@" . | peco --exec 'awk -F : '"'"'{print "+" $2 " " $1}'"'"' | xargs less '
ack の結果を pecoに食わせて、peco側で実行するコマンドを指定(awkでコマンドを生成して less に食わす)することができ、指定したコマンドを実行した後、pecoの検索結果に戻ってくることができます。
素晴らしい!!
余談
ちなみに私は、peco関連はfunctionに集約しているので pe という名前で利用しています。
function pe() { ack "$@" . | peco --exec 'awk -F : '"'"'{print "+" $2 " " $1}'"'"' | xargs less -N ' }
exec
元のwrapperとして利用しているexecというコマンド知りませんでした。
以下に詳しく記載されています。
UNIXの部屋 コマンド検索:exec (*BSD/Linux)
forkせずに実行してくれるので省エネなわけですね。
あるコマンドを実行するような wrapper script には良いのですね。
functionではどうなの?
結局上記 pe は exec なしで実行しています。
function内部でのPIDは、外と同じになるので
$ echo $$ 42155 $ function pid() { echo $$ } $ pid 42155
exec 付きだと終了してしまうのでは?と思ったのですが、execなしと変わらず利用できます。
とりあえずなしの方が良い気がするので、一旦execなしで利用しています。