ファイルパスによってインデントを変更する

  • 4
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

(この記事には補足があります。最後までお読みください)

個人的に書くコードはソフトタブ(空白文字でインデント)だけど、仕事のJavaScriptのコーディングルールはハードタブ(水平タブ文字でインデント)なんだよー、仕事で書くコードは全て hoge が含まれるディレクトリにあるよー、な場合。

なんか適当。正規表現も setq する内容もフックの名前も各自よしなに。要するにモードにフックを追加するだけです。 .emacs.d/init.el とかにどうぞ。

(add-hook
 'js-mode-hook
 (lambda ()
   (when (string-match ".*hoge.*/.*\\.js"
                       (or (buffer-file-name) ""))
     (setq indent-tabs-mode t tab-width 4))))

追記

js2-mode とか使ってる場合は js2-mode-hook、PHPなら php-mode-hook とか、よしなに書いてくださいね。

メジャーモードによってはフックが提供されてない場合は、さあどうすれば良いのでせうね ヾ(〃><)ノ゙☆

補足

@yasuyk@github さんのおっしゃる通り、 .dir-locals.el による ディレクトリ変数 を活用するのも良い方法です。 (僕もコメントで指摘いただくまで存じ上げませんでした…!)

ただし、ディレクトリ変数が階層構造による「変数の制禦」を目的とするものであること、上記のコード断片はディクトリ階層ではなく パス中に含まれる文字列 による判定を主眼としたもの (階層に依存しない) であることを理解の上で、目的に合致したものを活用するのが良いですね ヾ(〃><)ノ゙☆