Windows で Unicode Grep

以前、NTEmacs で UTF-8 な環境構築を試行錯誤 しつつ苦労していたことのひとつに、NTEmacs では grep など外部プロセスへ引数として渡せる文字列は文字コード CP932 の範囲内に制限される、という問題があった。例えば、NTEmacs から「M-x grep-find」を実行してカレントディレクトリ以下の「Cōgitō」を含む箇所を探しだそうとしても、うまく検索結果が返ってこない。

https://skalldan.files.wordpress.com/2012/03/wpid-cogito_ntemacs_grepfind.png

# 上の buffer が現在編集中のもの。この buffer を保存して、ここから M-x grep-find (find . -type f -exec grep -nH Cōgitō {} /dev/null \;) を実行しても結果が返ってこない...

Cygwin 端末からならうまく検索できる。上と同じコマンド (find + grep) を使って、

https://skalldan.files.wordpress.com/2012/03/wpid-cogito_mintty.png

あるいは ack を使ってもいい1

https://skalldan.files.wordpress.com/2012/03/wpid-cogito_ack.png

これらでもいいのだが、ヒットしている箇所が多くなれば、検索結果とエディタが連携していないと不便な場合が多い。

また Windows の有名なエディタ「秀丸」や「サクラエディタ」、「Notepad++」などの grep 機能でも問題なくうまくいくようだ。

https://skalldan.files.wordpress.com/2012/03/wpid-cogito_notepad.png

# 上の例は Notepad++ の「すべてのドキュメントを検索」。

しかしこれらもまた、エディタに備わった grep 機能なので、元来検索結果をそれ以外のエディタで編集する、ということは想定されていない。編集作業はあくまで NTEmacs で行いたいので、grep 機能のみこれらのエディタのものを使う、ということもあまり効率的ではなさそうである。

そこで、Windows 用 Unicode Support のフリーの Grep ソフトを探してみた。いくつか良いものが見つかったが、正規表現にも対応した grepWin という検索・置換ソフトがシンプルで使いやすそうだった2

grepWin is a simple search and replace tool which can use regular expressions to do its job. This allows to do much more powerful searches and replaces.

https://skalldan.files.wordpress.com/2012/03/wpid-cogito_grepwin.png

コマンドライン (command line parameters) や Windows Explorer の右クリックのコンテキストメニューからも検索できる。

https://skalldan.files.wordpress.com/2012/03/wpid-grepwin_explorer.png

検索結果のファイルをダブルクリックして、関連付けられている既定のプログラムでファイルを開くことができるが、「open with editor」でファイルを開くプログラムを指定できる。NTEmacs で開く場合は、以下のように指定しておくとよい。なお、NTEmacs は server-start しておく必要がある。

C:\cygwin\usr\local\share\emacs\bin\emacsclientw.exe +%line% "%path%"

https://skalldan.files.wordpress.com/2012/03/wpid-grepwin_emacs.png

私の専門はインド学仏教学で、相当数のファイルを対象に文字列検索を行うが、その際、サンスクリット語等をラテン文字転写した際のアクセント付き文字 (ā,ī,ū など) が検索語に含められないと少し困る。NTEmacs ではこのようなアクセント付き文字を grep に渡すことに難があったのだが、Windows でテキスト検索する際は、しばらくこの grepWin を使用してみることにする3

grepwin_pali.png

参考

Footnotes:

1 ack は Perl だが、他にも Ruby だと Rak, Python だと grin など同種のコマンドラインツールが利用できる。

2 grepWin は有名な Subversion のクライアント TortoiseSVN の作者 Stefan Küng 氏のツールである。他にもフリーソフトとしては、MS Word や PDF ドキュメントの検索にも対応した dnGREP がある。こちらも少し使用してみたがとても使いやすい。

3 NTEmacs 内で検索したい場合、grep よりは検索に時間がかかるが color-moccur がとても便利である。これは Elisp だけで grep や grep-find のような機能を実現しており、Emacs で開いて表示できるどんな文字コードでも検索できる。

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s