試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

GNU Emacsにおける文字の自動色分け(font-lock)の設定

多くのテキストエディタには、プログラミング言語スクリプト言語マークアップ言語などの構文に基づいて、文字に色を付ける機能がある。
Emacsでは「font-lock」という機能によってこれを実現しているが、有効にするための設定を記述しないと使えない。

メジャーモードと色分け

編集する対象となるファイルの種類によって、Emacsは動作モード(メジャーモード)を変更し*1、編集しているファイルの種類に関連する機能が使えるようになったり、その種類の文法に基づいた色分けを行ったりする。その色分けをするために、font-lockを有効にしておく必要がある。

色分け機能の有効化

以下の設定を${HOME}/.emacsに記述する。文字装飾の方式は幾つかあるのだが、バージョン21以降では「jit-lock-mode」を指定しておくのが良い。
ファイル名: ~/.emacs

;;; 色分けの設定
(global-font-lock-mode t)
(if (>= emacs-major-version 21)
  (setq font-lock-support-mode 'jit-lock-mode)   ; Just-In-Timeな文字装飾方式
  (setq font-lock-support-mode 'lazy-lock-mode)  ; Emacs20以前では古い方式
)

デフォルトの色分けと背景色について

デフォルトの色分けは、それなりに読みやすい上に、Emacs21以降では、設定した背景色が暗めである場合にそれを検出して、白などの明るい背景色を指定した場合とは別の、暗い背景色向けの色セットを適用してくれる。

色分けを細かく設定する

6月4日に書いた配色の設定でfont-lockによる色分け表示をしていると、少しだけ調整したい色が出てきた。暗い背景色向けのデフォルトの色セットをベースにして、微調整してみるとこのような設定になった。
ファイル名: ~/.emacs

;;; 種類ごとの色
(add-hook 'font-lock-mode-hook
  '(lambda ()
    ;(set-face-foreground 'font-lock-comment-face "chocolate1")
    (set-face-foreground 'font-lock-comment-face "#f69933")  ; 微調整
    (set-face-foreground 'font-lock-string-face "LightSalmon")
    ;(set-face-foreground 'font-lock-keyword-face "Cyan1")
    (set-face-foreground 'font-lock-keyword-face "#66e6e6")  ; 微調整
    (set-face-foreground 'font-lock-builtin-face "LightSteelBlue")
    (set-face-foreground 'font-lock-function-name-face "LightSkyBlue")
    (set-face-foreground 'font-lock-variable-name-face "LightGoldenrod")
    (set-face-foreground 'font-lock-type-face "PaleGreen")
    (set-face-foreground 'font-lock-constant-face "Aquamarine")
    (set-face-foreground 'font-lock-warning-face "Pink")
  )
)

調整したのは、コメント(処理に直接関係のない部分)と予約語の色。この例は微調整なので大きな変化はないが、全ての色の組み合わせを全部自分で書き直すこともできる。

上の画像の中では、一番上のコメントの色とその下の「static」などのキーワードの色を変更している。

*1:基本的には、ファイルを開いたときに種類を判別し、自動的にモードを切り替えるが、手動で切り替えることもできる