pecoめっちゃ便利ですよね. 僕も愛用しています.
こちらの記事で紹介されているように, ghq
+ peco
も便利ですが, 僕は ag
+ peco
の組み合わせにハマっていて(?), その紹介をします.
ag
ag
(The Silver Searcher)は, 一言で言えば「めっちゃ早いgrep
」みたいなものです. 最近は, これよりも更に早いhw
(Highway)とかも登場しているようですが, 手癖でずっと ag
コマンドを使っています.
MacでHomebrewを使っていれば, こういう感じでインストールできます:
$ brew install the_silver_searcher
さて, ag
コマンドは grep
のように使えますが, -l
オプションを使うと, カレントディレクトリ以下に存在するファイル(ag
が検索対象とするファイル?)の一覧を出してくれます(例は, skajiさんのApp::cpmのGitリポジトリのルートで実行してみた様子です):
$ ag -l author/copyrights-and-licenses.json author/cpanfile.snapshot author/fatpack.pl Changes Build.PL cpanfile lib/App/cpm/CircularDependency.pm dist.ini lib/App/cpm/Distribution.pm lib/App/cpm/Job.pm lib/App/cpm/Logger/File.pm lib/App/cpm/Logger.pm ...
これを, peco
と組み合わせてみましょう.
ag
+ peco
色々やり方はあると思いますが, 自分は .zshrc
に次のように書いています.
function peco-file() { local filepath=$(ag -l | peco --prompt 'PATH >') if [ -n "$filepath" ]; then if [ -n "$BUFFER" ]; then BUFFER="$BUFFER $(echo $filepath | tr '\n' ' ')" CURSOR=$#BUFFER else if [ -f "$filepath" ]; then BUFFER="$EDITOR $filepath" zle accept-line fi fi fi } zle -N peco-file bindkey '^f' peco-file
peco-file
という関数を用意して, これを Ctrl + f
で呼び出すようにしています. 更に, バッファ($BUFFER
)の有無によって挙動が変わるようになっていて,
- バッファ(
$BUFFER
)が空の時は,ag -l
によって得られたファイルの一覧をpeco
で検索/選択して, それをそのままvim
で開く, という挙動をします:
- バッファ(
$BUFFER
)に空ではない時, 例えばcarton exec -- prove
のような文字列が入力済みのときは,peco
で検索/選択したファイルを入力済みの文字列の末尾にくっつける, という挙動をします:
このように, 「vim
でファイルを開く」と「コマンドの引数としてファイルを指定する」が, 全て Ctrl + f
で実現できて, これがなかなか非常に便利です.
まとめ
ghq+pecoとかいまさらすぎてあまり語られることもなくなってきた感があるけど、逆に若者が知らなかったりするので定期的に言及したほうがいいかなと思って書きました。
— FUJI Goro (@__gfx__) 2017年7月26日
このツイートを見て, 確かに! と思ったので, シュッと書きました.
皆さんもこの機会にオリジナルの peco
ハック(?)について記事を書いてみると良いと思います!!!