created: 2019-09-25 24:00, tags: emacs, config,

エディタの設定で空白文字は可視化しておいた方が良いという話

プログラミングする人で、それなりの人がドツボにハマる瞬間がある。 それは空白文字 (スペース) 問題である。

その文字をエディタ上で可視化 (見える) しておく方が、後々不幸な事故に合わずに済むようになるという話 (それ以外の恩恵もある)。

空白文字を知る

プログラムを書く上で戦う事になる空白文字は 3 種類で、「タブ」「半角空白(スペース)」「全角空白(スペース)」が対象となる。

これらはデフォルトの設定ではテキストエディタ上で視認する事が出来なかったりする。 そのため、多くのプログラミング初心者がプログラムを書く時に泣かされている。

半角空白文字

IME が半角入力モードの時にスペースバーで入力する文字のこと。 文字としては「 」だが、まぁ視認できない。

プログラミングの時には、インデントを付けたりプログラムの語間を空ける時に使う。

全角空白文字

IME が全角入力モードの時に入力される。 「 」だけど、半角空白文字と比べて違いを把握しようと思うと前後に視認できる文字が無いと不可能である。

タブ文字

「 」こちらはタブ文字。 今までのものと比較してもさっぱり分からない。

視覚化

Emacs では下記のように表示される。

Emacsエディタ画面

暗い水色がタブ文字 1 つ (8 文字幅設定)、赤の下線が空白文字 3 つ、緑が全角の空白文字 1 つ となっている。

半角空白文字に関しては、空白文字が行の末尾についている場合のみ表示するようにしている。 こうする事で、行末の無駄な空白文字の挿入 (不思議に思われがちなんだけど、本当にたくさん見かける) を発見する事ができる。 こういう部分は git で差分を確認する際にアピールされるんだけど、無視して (SourceTree だと視覚化されない?) コミットする人が多く、結構気になる (フォーマッタとかで機械的に削除でも良いけど)。

全角スペース・タブを目立つように表示する | higepon blog

Emacs の設定自体は昔に上記ページを参考に導入したものをそのまま使い続けているだけなので、それを使ってもらえれば。

ページが消える事もあるので、引用記載もしておく。

(defface my-face-b-1 '((t (:background "medium aquamarine"))) nil)
(defface my-face-b-2 '((t (:background "gray26"))) nil)
(defface my-face-u-1 '((t (:foreground "SteelBlue" :underline t))) nil)
(defvar my-face-b-1 'my-face-b-1)
(defvar my-face-b-2 'my-face-b-2)
(defvar my-face-u-1 'my-face-u-1)
(defadvice font-lock-mode (before my-font-lock-mode ())
  (font-lock-add-keywords
   major-mode
   '(
     (" " 0 my-face-b-1 append)
     ("\t" 0 my-face-b-2 append)
     ("[ ]+$" 0 my-face-u-1 append)
     )))
(ad-enable-advice 'font-lock-mode 'before 'my-font-lock-mode)
(ad-activate 'font-lock-mode)
(add-hook 'find-file-hooks '(lambda ()
(if font-lock-mode
nil
(font-lock-mode t))) t)