created: 2019-10-16 24:00, tags: emacs, editorconfig,

Emacs の設定をディレクトリ単位で変更する

Emacs で Vue.js の作業を行なっているときに遭遇した問題の話。 チームでは EditorConfig (.editorconfig) を使用しており、設定でインデントレベルを全て 2 にしている。 なのに、Emacs 上の vue-mode では タグ内でインデントが 4 になっている事があった。 web-mode でも同じ問題があったんだけど、これはどうも web-mode や mmm-mode (vue-mode は mmm を使用する) で強制的に書き換えてる挙動があり、デフォルトのインデントサイズが変更されても無意味となる (変更された上で書き換えられるみたい)。

その為、それよりも強力な書き換えを行なうか、そもそも web-mode, mmm-mode で設定されるインデントをデフォルトを読みにいくようにしないと駄目そうだった。 web-mode は過去に対応し、.editorconfig の通りに動くように修正したが、mmm-mode も調べるのが億劫で 2、3 日放置していた所 Emacs の機能で良い物を見つけた。

dir-local

GNU Emacs Manual | 51.2.5 ディレクトリーごとのローカル変数

上記を参照し、.dir-local で変数を上書きできるという事を見つけ対応してみた。 mmm-mode も上手く設定が上書きされ、インデントが 2 になったので、問題無いと思う。

対応方法

とは言え、毎回ばか正直に設定を調べて書くのは面倒なんだけど、ちゃんとコマンドが用意されていたのでそれだけ覚えればあとは簡単だった。

M-x add-dir-local-variable
Mode or subdirectory: vue-mode
Add directory-local variable: js-indent-level

M-x add-dir-local-variable を実行すると、あとはインタプリタ上で質問に答えるだけで、実行時のカレントディレクトリ (編集中のファイルの存在するディレクトリ) に .dir-local を作成、設置してくれる。

また、続けて他の設定を書いてもそれを追記、更新してくれるためメンテナンスが楽。

ただ、このファイルがメンバーに共有されてもゴミになるので全員が Emacs を使わない限りじは、.gitignore で弾いておいた方がいいかも知れない。