1. katoken-0215

    Posted

    katoken-0215
Changes in title
+[Emacs] auto-mode-alist の "\\.js\\'" と "\\.js$" の違い
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,53 @@
+はじめ
+======
+
+js2-modeのコメントに書いてある、以下の記述をコピペして設定していました。
+
+```el
+(add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))
+```
+
+一方で、だいぶ前に設定した`c++-mode`の設定は以下のように記述していました。
+
+```el
+(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 に追加するパターンは、`\\'`で終端するべき。
+
+参考
+====
+
+* http://www.emacswiki.org/emacs/AutoModeAlist
+* http://masutaka.net/chalow/2011-10-18-1.html
+
+蛇足
+====
+
+* MacBook でバックスラッシュを出すにはoption+¥なので面倒
+* 引用文中に`$`でくくられた箇所が入っていたので数式と解釈されてしまい、表示が崩れて困った
+* バッククオートとクオートが混ざって疲れる