Emacsでタブ・全角スペース・行末の空白文字列を目立たせる

最近Emacsの記事を書く率が異常に高い気がします。今日は、タブ、全角スペース、行末の連続する空白文字列に色を付ける、という話題です。

それ何度も見たよ、という方も多いかと思いますが、今回はtext-modeでも色がついたよ!という部分が(おそらく)新ネタなので勘弁してください。

まずは設定方法を先に紹介しておきます。.emacsにdotemacs-show-white-spaces.txtの内容を貼付けてください。これで色がつくようになったはずです。

emacs-spaces.png

上図が設定後のtext-modeです。色のセンスが非常に悪いので、何とかした方がいいと思います。

さて、語り尽くされているような話題なんですが、念のためこの設定のメリットをご紹介します。まず全角スペースについてですが、プログラムを書いている際、一見正しくインデントされているように見えるのに何故か全角スペースが入っていて動かない、なんてバグで悩むことがあります。稀に、大人数で作業をしているとそんなソースコードが紛れ込むことがあるわけです。ところが、一見して全角スペースと半角スペースとは見分けがつかないので、意外と原因解明まで時間がかかることがあるんですよね。全角スペースが一目でわかるようになれば、そんな下らないことで時間を浪費することはなくなります。素晴らしいですね!

また、複数人が参加するプロジェクトでは「インデントはすべて半角スペースで、行末の不要な空白文字はすべて削除」など、空白文字に関するルールを決めるべきだと思います。これは編集合戦になるのを防ぐためです。タブ文字が半角スペースになっただけのdiffを読む人の身になってください。diff -wすりゃいいでしょ、という話のような気もしますが。

また、私は個人的に「タブ文字を使うのやめようよキャンペーン」を実施中です。最近はディスクスペースも有り余ってるわけですから、タブ文字でインデントなんてケチくさいことを言わずに半角スペースを使いましょうよ。ネットワーク転送が厳しくなってきたときなど、どうしてもケチケチしたいときはgzipすればいいんです。特に実験もせずに言いますけど、gzip後のサイズで比べたらタブ文字を使っても半角スペースを使っても大差ないんじゃないでしょうか。というわけで、タブ文字を見た瞬間に排除したいので色を付けるわけです。

参考までに、私のphp-modeに関する設定を紹介します。dotemacs-php-mode.txtがそれです。このように、(indent-tabs-mode nil)しておけば自分でうっかりタブ文字を入れてしまうことは無いはずです。

このように設定しておいて、万一タブ文字を含んだPHPファイルを見つけた場合はC-x h(mark-whole-buffer、全選択)してM-x untabifyでタブ文字を消し去ることができます。それまでのタブ幅が合っていないようなら、再度C-x hしてからC-M-\(indent-region)すれば完璧です。そんな大胆な修正をした場合にはcommitする前にdiffしてくださいね。念のため。

そんなわけで、上記設定は大活躍するはずです。万一まだやっていない人がいたら、ぜひ設定しましょう。text-modeで全角スペースを排除したいかどうかはともかく、区別できないよりは区別できた方がいいと思います。

やや余談気味ですが、上記設定は私の環境で動きましたというだけで、ベストな対応なのかどうかは全くわかりません。ただ、text-modeで色がつかない件について苦労している人もいるようでしたので、公開することにしました。また、fundamental-modeで同様にadd-hookしても色はつきません。これはおそらく手の打ちようがないのだと思います。

参考リンク

コメント / トラックバック 1 件

#1 続・Emacsでタブ・全角スペース・行末の空白文字列を目立たせる 2008/08/29 23:05

[...] 以前、「Emacsでタブ・全角スペース・行末の空白文字列を目立たせる」という記事を書きましたが、その続報です。同じ事をするのにjaspace.elを使った方がいい感じに思えてきたので、紹介します。 [...]

コメントする