.dir-locals.el内のファイルにメジャーモードを設定する方法


7

ファイルローカル変数を使用するのと同じように、ファイルのメジャーモードを設定したい

Local Variables:
mode: text
End:

しかし、.dir-locals.el問題のファイルを「汚染」しないために。これは可能ですか?


これは純粋に個人的な使用ですか、それとも共有したいものですか?ディレクトリローカル変数に頼るのではなく、elispでこれに取り組むことができるいくつかの方法があります。
phils 2015年

@phils共有可能なソリューションがあるといいので、dir-localsについて考えました。しかし、実際には、それは多かれ少なかれ個人的なものです。(多くの人と共有される可能性は低く、emacsやケアを使用しているかどうかを知っている人もいます)。
xebtl 2015年

OK。私が利用だと思うeval擬似変数がある中でそれを処理する唯一の方法.dir-locals.elファイル。カスタムelispの場合auto-mode-alist、ファイル名の正規表現に一致するように使用することを検討するだけです(regexp-quote必要に応じて、逐語的な文字列値のパターンを作成するために使用できます)。
phils 2015年

回答:


4

モードの代わりに文字列を指定することは可能ですが、これはサブディレクトリに対してのみ機能します。したがって、nil代わりにすべてのモードを一致させるために使用し、次にeval条件付きでメジャーモードを変更するためのキーを使用します。

((nil
  (eval
   (lambda ()
     (when (string= (file-name-nondirectory buffer-file-name)
                    "file-name.extension")
       (my-mode))))))

このアプローチの欠点は、evalキーが安全でないため、これを有効にするには、変数を永続的に確認する必要があるということです。


ありがとう、これでうまくいきます。誰かが次のフォームで違いを説明できますか?`` `((nil。((eval。(lambda()(when(string =(file-name-nondirectory(buffer-name))" filename ")(my-mode)))))))` ``
Swarnendu Biswas

2

以下.dir-locals.elは、ディレクトリ内のすべてのファイルのメジャーモードをに設定するのにうまく機能しますshell-script-mode

((nil . ((mode . shell-script))))

明らかな欠点は、ディレクトリ内のファイルの特定のサブセットのみに対してメジャーモードを指定できないことです。

補遺:面白いことに、それ.dir-locals.el自体のメジャーモードをに設定するという副作用もありますshell-script-mode

補遺2:むしろおかしなことに、Diredバッファーのメジャーモードをに設定するという副作用もありshell-script-mode、初期化中にエラーがスローされるため、何も開くことができません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.