今回も、弊社で毎日行われている、ミニミニ Emacs 勉強会で @tomoyaton から教えてもらいました。

Emacs23 からは M-x global-whitespace-mode すると、改行やタブ、スペースを色づけできるようになってます。常に表示させるには ~/.emacs に以下を書けば OK です。

(global-whitespace-mode 1)

でも私は改行と全角スペースだけ色付けすればよいので、上記に加えて下記も設定することにしました。

;; スペースの定義は全角スペースとする。
(setq whitespace-space-regexp "\x3000+")

;; 改行の色を変更
(set-face-foreground 'whitespace-newline "gray40")

;; 半角スペースと改行を除外
(dolist (d '((space-mark ?\ ) (newline-mark ?\n)))
  (setq whitespace-display-mappings
        (delete-if
         '(lambda (e) (and (eq (car d) (car e))
                           (eq (cadr d) (cadr e))))
         whitespace-display-mappings)))

;; 全角スペースと改行を追加
(dolist (e '((space-mark   ?\x3000 [?\□])
             (newline-mark ?\n     [?\u21B5 ?\n] [?$ ?\n])))
  (add-to-list 'whitespace-display-mappings e))

;; 強調したくない要素を削除
(dolist (d '(face lines space-before-tab
                  indentation empty space-after-tab tab-mark))
  (setq whitespace-style (delq d whitespace-style)))

delete-if() 使っているので、あらかじめ (require 'cl) する必要があります。