スポンサーリンク

2016年5月23日月曜日

Cygwin の grep の動きがおかしくなった

Cygwin を久し振りにアップデートしたところ grep の動作がおかしくなってしまいました。Emacsからgrepを呼び出ほとんどヒットしないのです。ターミナルのbashからgrepを実行した場合はちゃんとヒットするのに。

調べてみたらすぐに原因が分かりました。grepがv2.24になり、ロケールをちゃんと認識するようになったのが原因のようです。(ていうか、今までロケールを認識していなかったのが少し驚きです。)



Cygwin のターミナルでログインシェルとしてbashを起動した場合は、何もしなくても環境変数LANG=ja_JP.UTF-8 が設定されています。これはWindowsの地域設定等の内容を基に、ログインスクリプトが自動的に設定してくれたものです。

しかしEmacs(NTEmacs)から直接grepを起動した場合はこのログインスクリプトを通らないため、ロケールが設定されません。多分LANG=C(デフォルトのロケール)で実行したのと同じことになってしまっている様です。なので日本語が含まれたUTF-8ファイルが検索できません。

ではどうしたらよいでしょうか?色々な方法があるようですが、一番簡単なのはWindowsの環境変数でLANGを設定してしまうことです。自分はソースコードやメモは全てUTF-8で統一しているので、LANG=ja_JP.UTF-8としました。これでまたEmacsからもgrep検索できるようになりました。


0 件のコメント :

コメントを投稿