はじめ
js2-modeのコメントに書いてある、以下の記述をコピペして設定していました。
(add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))
一方で、だいぶ前に設定したc++-mode
の設定は以下のように記述していました。
(add-to-list 'auto-mode-alist '("\\.C$" . c++-mode))
(add-to-list 'auto-mode-alist '("\\.cc$" . c++-mode))
(add-to-list 'auto-mode-alist '("\\.cpp$". c++-mode))
(add-to-list 'auto-mode-alist '("\\.hh$" . c++-mode))
(add-to-list 'auto-mode-alist '("\\.h$" . c++-mode))
終端が$
か\\'
であるかが異なります。
正規表現では$
は行の末尾にマッチするするのでわかるのですが、
\\'
はわかりません。
EmacsWiki
Gooogle 先生に emacs auto-mode-alist
と尋ねたところ、
http://www.emacswiki.org/emacs/AutoModeAlist を教えてくれました。
Note that
\'
matches the end of a string, where as$
matches the empty string before a newline. Thus,$
may lead to unexpected behavior when dealing with filenames containing newlines. (Should be pretty rare… ;))
ということで、ファイル名に改行が入ってくると予期しない動作になる("foo.js\nx"
とか?)ので、この用途では\\'
を用いるべきとのことです。
また、これはauto-mode-alist
にかぎらず、Emacsの正規表現全般で使えます。
結論
auto-mode-alist に追加するパターンは、\\'
で終端するべき。
参考
蛇足
- MacBook でバックスラッシュを出すにはoption+¥なので面倒
- 引用文中に
$
でくくられた箇所が入っていたので数式と解釈されてしまい、表示が崩れて困った - バッククオートとクオートが混ざって疲れる