2018年7月26日木曜日

Emacsでgrep検索して後悔するとき(長い行を含むファイルの検索)

 一行がやたら長いファイル (jqueryとかxxx.min.js みたいな行が長いJavaScriptファイル) が含まれるディレクトリをgrepしてしまって、Emacsのgrep bufferの 出力が異常に遅くなるとき、というか検索結果の出力が終わらなくてがびーんとなるとき。 解決策を考えてみました。
解決策A: grep を使う場合に、grepの出力をcutする
grep -nHI -r -e  * /dev/null | cut -c1-500 - 
検索できるレベルにはなったような。
解決策B: agを使う
長い行を切るために ag-arguments に--width 500 をつけます(--widthと500はargumentとして分けます) オプションをつけた場合とつけない場合でtermtosvgで動画を撮ってみました。
つけない場合(遅い)
つけた場合(検索結果を全て出力する)
比較
A:
利点: minibufferでgrepのコマンドラインを編集するのでキーワードと対象のファイルを同時に編集できます。
欠点: キーワードを入れるべき位置まで毎度カーソル移動するのが面倒(カーソルの初期位置は行末)
B:
利点: 高速。
欠点: コマンドラインオプションが長い、多くて agのコマンドライン上で検索したキーワードが見つけにくいです・
注意; widthオプションはagのmanには書いていないけれど--help オプションでは表示されます。
古いagにはwidthにはないことがあります。少なくとも2.0.0にはあります。
長い行を検索しちゃう例
  1. 改行を除いてminifyされた(.min)JavaScriptを含むディレクトリで再帰的に検索した場合
  2. ATGCからなるテキストファイルを検索した場合
検索対象から除外するのが正しいけれど、毎回指定するのは面倒なんだよな。。

0 件のコメント:

コメントを投稿