文字コード混在環境でのEmacsのgrep

Ubuntuの標準の文字コードUTF-8.しかし未だにEUC-JPなファイルを扱わざるを得ない場面も多い.そんな環境でもEmacsgrepを使えるようにするお話.

greplgrep

まずは,grepについて.grepは日本語を扱うこともできるが,文字コードが混在してたらダメ.そこでlgrepを使う.lgrep文字コードを気にせずgrepできるようになる賢いやつ.lvをインストールしたら付いてくるので,lvをまずはインストールしよう.

% sudo aptitude install lv

ちなみにlvはいろんな文字コードに対応したlessみたいなもの.これからはlessの代わりに使っても良い.あ,lgrepgrepとオプションが違ったりするので完全な置換にはならないらしい.
とりあえず,lvをインストールしたのでlgrepが使えるようになった.

Emacslgrepを使う

実はEmacsには M-x lgrep が標準で存在する.しかし,これはgrepを対話的に行うもので,上記のlgrepとは違う(ような気がする).まぁ便利だけど.
今回は M-x greplgrep を使う設定..emacsに以下を記述する.

(if (file-exists-p "/usr/bin/lgrep")
  (setq grep-command "lgrep -nk -Ou8 "))

これはlgrepが存在する場合はgrepの代わりにlgrepを使うという設定.

使い方

M-x grep とするとミニバッファが開く.(grep-commandで指定したコマンドが最初から入力されている)

そこに検索語句,検索するファイル(ワイルドカードが使える)の順に入力してRET.

すると検索結果が表示される.

ちなみにこの方法ではサブディレクトリは検索されないので,再帰的に検索したい場合は
M-x grep-findを使う.

使い方を簡単に説明すると,findの後に検索するディレクトリを指定.最後にキーワードを指定するだけ.
これはfind, xargs, lgrepを組み合わせて使っているだけなので,詳しくはfind, xargs, grepでググったら情報がたくさん出てくる.
いつかそれについてもエントリを書きたい.