vimの外部grepでackを使う
ackというperl製のgrepがいいという情報を聞いたのでvimの外部grepで使えるようにしてみた。
.vimrcはこんな感じ。
追記: ackが使えない場合のことも考慮しました。
" grep設定 if executable('ack') set grepprg=ack\ --nogroup set grepformat=%f:%l:%m else set grepprg=grep\ -Hnd\ skip\ -r set grepformat=%f:%l:%m,%f:%l%m,%f\ \ %l%m endif
ついでに拡張子を指定できるように独自コマンドも作ってみた。
" 拡張子指定grep command! -complete=file -nargs=+ Grep call s:grep(<f-args>) function! s:grep(pattern, directory, ...) let grepcmd = [] call add(grepcmd, 'grep') if executable('ack') if a:0 && a:1 != '' call add(grepcmd, '--' . a:1) else call add(grepcmd, '--all') endif else if a:0 && a:1 != '' call add(grepcmd, '--include="*.' . a:1 . '"') endif endif call add(grepcmd, a:pattern) call add(grepcmd, a:directory) execute join(grepcmd, ' ') endfunction
使い方は
Grep pattern directory perl
みたいな。
また上には書いてるけどackのオプションに --nogroup は付けなくても特に問題はないみたい。
理由は不明・・。