前置き
前回、「これから調べること」としてgrepを挙げていました。
でも秀丸のgrepにどっぷりだった私は、なんだかとっつきにくくて「食わず嫌い」な状態でした。
実は、そんな人多いんじゃない?
とにかく使ってみた
過去ログなんかを漁るのには、grep一択。
「今までなんとなく避けてたけど、使ってみるか…。」
という感じで、まずは基本的なコマンド
:vimgrep {pattern} {file}
:vimgrep shingargle kakoLog*.log
という感じですな。
で、検索結果がでるのですが、(1 of 55): shingargle って素敵な名前
とかなるわけです。
え?え?一行だけ?
ヒット件数はわかるものの、全体が見渡せない…。
これが、とっつきにくい理由でした。
次の(前の)検索位置へ
ため息混じりにひとつひとつ確認です。
:cn
:次の検索結果へ移動する:cN
:前の検索結果へ移動する:cp
でもOK
もう面倒極まりない。
検索結果一覧表示
世界を席巻するVimmer達が、こんな作業をするはずがない。
と、ちょっと調べる。
:copen
grep直後にこのコマンドですよ。
すると、
:
kakoLog_2015-02-18.log|314 col 28| ....
kakoLog_2015-03-09.log|4 col 28| ....
:
ずらっと検索結果の一覧が別窓で表示されました。
当然、タグジャンプも可能。Vimでも「タグジャンプ」って言うのかは不明だけど。
で、検索し終わって別窓を閉じるときは
:cclose
です。
ワイルドカード
次に悩んだのが、ディレクトリを再帰的に検索する方法。
ワイルドカードを使用します。
" カレントディレクトリ以下のあらゆるファイルを対象にする
:vimgrep {pattern} **
" Documents/Logs以下のあらゆるファイルを対象にする(ディレクトリを再帰的に検索)
:vimgrep {pattern} Documents/Logs/**
" Documents/Logs/users内のファイルを対象にする
:vimgrep {patter} Documents/Logs/users/*
" Documents/Logs以下のlogファイルを対象にする
:vimgrep {pattern} Documents/Logs/**/*.log
" app/views以下でkakoで始まるlogファイルを対象にする
:vimgrep {pattern} Documents/Logs/**/kako*.log
知ってしまえば、なんてことない。チョロい。
QuickFixCmdPost というドーピング
使ってると「:copen
を打つのも面倒だ。」となるわけです。慣れって怖いですね。
そんなあなたは(私は).vimrcに以下の一文を追記しましょう。
autocmdQuickfixCmdPost*copen
「QuickFix とは、エラー結果や grep の結果が表示される専用のウインドウ領域のこと」
参考:http://www.soum.co.jp/misc/v/vim-no-susume/7.html#id5
ワイルドカードを指定することで「QuickFixが使われたらcopenで自動的に開いてしまえ。」と。
きっとgrepの結果だけじゃなく、色々な場面で活躍してくれることでしょう。
まとめ
.vimrcに以下の一文を追記
autocmdQuickfixCmdPost*copen
基本コマンドは↓
:vimgrep {pattern} {file}
ワイルドカード
" カレントディレクトリ以下のあらゆるファイルを対象にする
:vim {pattern} **
" Documents/Logs以下のあらゆるファイルを対象にする(ディレクトリを再帰的に検索)
:vim {pattern} Documents/Logs/**
" Documents/Logs/users内のファイルを対象にする
:vim {patter} Documents/Logs/users/*
" Documents/Logs以下のlogファイルを対象にする
:vim {pattern} Documents/Logs/**/*.log
" app/views以下でkakoで始まるlogファイルを対象にする
:vim {pattern} Documents/Logs/**/kako*.log
ここで一句
「技術者は楽するために苦労する」
オソマツ