LoginSignup
19
20

More than 5 years have passed since last update.

grep+pecoの検索結果を素早くvimで開く

Last updated at Posted at 2014-09-08

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

grep select

ag のオプションを使って、ファイル名検索とかも簡単

$ cd $GOPATH/src/github.com/peco/
$ agvi -g re

find select

解説

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  
19
20
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
20