pecoってどう便利なんだろう、と思っていたのだけど、その便利さを実感できたのでメモ。
やりたいこと
「hoge」でgrepかけて、引っかかったファイルのうち任意のものをviで開きたい
ってことがよくあります。
$ grep hoge -Rni app/
app/controller/hoge_controller.rb:3:class HogeController
app/controller/hoge_controller.rb:12: tmp = hoge.hogege.hugogo
app/controller/hoge_controller.rb:42: tyome = hoge.sotr_by(&:bar)
app/model/hoge.rb:3:class Hoge
:
$ vi app/controller/hoge_controller.rb +42
面倒くさい。
検索結果から選んでvimで開く
ついでに、grepよりag
(the_silver_searcher)のほうが好きなので、そっちを使います。
# agで検索した結果から選択し、ファイルを開く
function agvi(){
path=$(ag $* | peco | awk -F: '{printf $1 " +" $2}'| sed -e 's/\+$//')
if [ -n "$path" ]; then
echo "vim $path"
vim $path
fi
}
$ cd $GOPATH/src/github.com/peco/
$ agvi chan
ag
のオプションを使って、ファイル名検索とかも簡単
$ cd $GOPATH/src/github.com/peco/
$ agvi -g re
解説
path=$(ag $* | peco | awk -F: '{printf $1 " +" $2}'| sed -e 's/\+$//')
ag $* # agviに渡した引数をすべて使ってagする
| peco # 結果をpecoする
| awk -F: .. # pecoで選んだものを「ファイル名 +行数」の形に整える
| sed -e .. # 上ので行数がないなら「+」も消す
# 上の結果を変数pathに入れて、pathが空白でないならvimで開く
# pecoの画面でESCなど使って何も選択しない時などを考慮
if [ -n "$path" ]; then
vim $path
fi