秀丸エディタで指定ディレクトリを除外する Grep を実現する

結論

秀丸エディタ単体では無理なので

  • 別の grep ツールで grep 結果をファイルに吐き、
  • そのファイルを秀丸エディタで開いてタグジャンプする

というやり方を用いる。

別の grep ツール?

Git for Windows に同梱された grep コマンドがオススメ。

正しくインストールできているかどうかは以下で確認できる。

$ where grep
C:\Program Files\Git\usr\bin\grep.exe

$ grep --version
grep (GNU grep) 3.0
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
...

ラッパーバッチファイル

「別の grep ツール」と「秀丸エディタ」を中継する仕組みが必要。

やり方は色々あるが、ここでは私が考えたものを紹介。

考え方

以下のような仕組みをバッチファイルで作った。

  • カレントディレクトリ配下を grep する
  • 除外したいディレクトリはあらかじめ指定しておく
  • 使い方は grepex キーワード とする

動作としては、 grepex キーワード を実行すると grepresult なるファイルが秀丸エディタで開かれる。この中身は以下のようになっており、秀丸エディタで普通にタグジャンプすることができる。

./source1.js:36:    // @todo util.js からコピペしたままなので DRY する
./source2.js:103:   // @todo 変数名がわかりづらいので具体的にする
...

バッチファイル中身

grepex.bat

@echo off
setlocal
set keywords=%*
set outfilename=grepresult
set outfilepath=%~dp0%outfilename%
set editorpath=C:\Program Files\Hidemaru\HIDEMARU.EXE

grep -rn %keywords% ./ --exclude-dir={.git,node_modules,lib} --exclude=%outfilename% > %outfilepath%
start "" "%editorpath%" "%outfilepath%"

利用時に設定が必要なのは以下二つ。

  • editorpath 変数
    • 利用するテキストエディタのフルパス
    • 動作確認は秀丸エディタでしかしてない
    • 上記の grepresult フォーマットに対応したエディタなら何でも良い
  • --exclude-dir オプション
    • 除外したいディレクトリを指定する
    • ここでは以下三つを指定している
      • .git
      • node_modules
      • lib