ひさびさに CakePHP を clone したら、.editorconfig
という見慣れないファイルがあった。
ファイル内はこんな感じ。
; This file is for unifying the coding style for different editors and IDEs.
; More information at http://editorconfig.org
root = true
[*]
indent_style = tab
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.bat]
end_of_line = crlf
http://editorconfig.org/ を見に行くと、EditorConfig というのは、複数のエディタや IDE 間で設定を共用しようというプロジェクトで、各エディタ用には、このドットファイルを解釈するためのプラグインが用意されているのであった。
当然、あるだろうと思って見てみると、やはり Emacs 用のプラグインも用意されていたので、早速インストールしてみた。
M-x package-install editorconfig
よっしゃ、簡単じゃん!と、プロジェクトのトップディレクトリにある index.php
を Emacs で読み込んでみたものの、インデントがスペースのまま。 .editorconfig
で定義されているタブによるインデントにならない。
あれ?なんで?と php-mode の設定とかを触っていたんだけど、実はこの辺は全く関係がなかった。よくよく調べてみると(というか、EditorConfig のページを読み込んでみると)、このプラグインを使うには外部の実行コマンド editorconfig
が必要だったのだ。
こいつは Homebrew に存在しているということだったので、そっち経由でインストール。
$ brew install editorconfig
今度こそ大丈夫だろ!と Emacs を再起動しつつ index.php
を読み込んでも変わらず。うーん、と悩みつつ、 editorconfig.el
のソースを読み始めたら、 edconf-exec-path
という設定と、それを使ったファイルの存在確認処理を発見。
あぁ、これにフルパス設定したろ、と次の記述を init.el
で読み込まれるファイルに追記した。
(setq edconf-exec-path "/usr/local/bin/editorconfig") ; Homebrew でインストールしたコマンドのパス
(後で発見した「EmacsでPATHの設定が引き継がれない問題をエレガントに解決する」を使って、シェルに設定している Homebrew 用の PATH を引き継ぐ方法の方が良さそうな気がする)
これで再び CakePHP の index.php
を読み込んでみたところ、インデントがタブに切り替わった。
いままで、Emacs の php-mode には、 php-enable-symfony2-coding-style
やら php-enable-wordpress-coding-style
のような個別プロジェクト用にコーディングスタイルの一括設定関数とかが用意されていたんだけど、プロジェクトが増えていくごとに破綻して行きそうだし、この EditorConfig プロジェクトの方がスマートだね。