Emacsでテキストを正規表現指定してハイライトする


最近はあまりExcelでドキュメントを書く機会はないんですが、職場によって仕様書のフォーマットがエクセルで決まっていたりしますよね。

結構嫌がるプログラマが多いんですけど、あれはあれで便利な場合もあると思います。

仕様をデシジョンテーブルで書いたりするには使いやすいと思います。

注意事項や特殊なケースに色つけたりできますし。


で、今日emacsでテキスト書きながら仕様を検討しているとき、あるキーワードに対して一時的に色付けしたいと思いまして、やり方を調べてみました


hi-lock-modeというのでできるようです。デフォルトで含まれてます。(GNU Emacs 23.3.1 (x86_64-apple-darwin11.2.0, NS apple-appkit-1138.23))


以下の設定でどこでも使えるようになるんですが、いつも使いたいわけじゃないので、とりあえず必要な場合だけM-x hi-lock-modeするようにします

(global-hi-lock-mode 1)


以下デフォルトのキー設定

(define-key hi-lock-map "\C-xwi" 'hi-lock-find-patterns)
(define-key hi-lock-map "\C-xwl" 'highlight-lines-matching-regexp)
(define-key hi-lock-map "\C-xwp" 'highlight-phrase)
(define-key hi-lock-map "\C-xwh" 'highlight-regexp)
(define-key hi-lock-map "\C-xwr" 'unhighlight-regexp)
(define-key hi-lock-map "\C-xwb" 'hi-lock-write-interactive-patterns)


highlight-lines-matchg-regexpは一致する正規表現が見つかった行を全部をハイライトします
highlight-phraseとhighlight-regexpの違いはよくわからないですが、正規表現がヒットした箇所だけハイライトします

unhighlight-regexpでハイライトを解除します

hi-lock-write-interactive-patternsはバッファでハイライトしているパターンを以下のような形式で書き出します

* Hi-lock: (("[Gg]lobal" (0 (quote hi-green-b) t)))
* Hi-lock: (("*" (0 (quote hi-yellow) t)))

この状態で次にファイルを開いたときにhi-lock-find-patternsを使うとハイライトが適用されます。

とはいえ、M-x hi-lock-modeした時点でハイライトを適用するか聞かれますので、これはあまり使う機会がなさそうです。

また、以下を設定しておけば、hi-lock-find-patternsで書きだしておいたパターンがファイル開いた時点で勝手に適用されます

(setq hi-lock-file-patterns-policy (lambda (pattern) t))


コード書いているときはauto-highlight-symbolのおかげであまり使わなそうですが、テキストで仕様とかテストパターン書いてるときは便利かもしれません。