11

いくつかの複雑な理由から、特定のディレクトリ (任意の名前、拡張子なし) 内のファイルを C モードで開きたいのですが、Emacs 用にそれらを変更したくありません (ファイルローカル変数は出力されていません)。ただし、Emacsでそれを行うのに苦労しています。これを dir-locals.el に入れようとしました:

((nil . ((major-mode . c-mode))))

そのディレクトリからファイルを開くと、major-mode変数は実際に上書きされc-modeますが、Cモードはバッファで有効になっていません。何が起こっていて、どうすればそれを適用できますか?

または、このディレクトリだけに追加することもできauto-mode-alistますが、ディレクトリ locals を介してそれを行う方法がわかりません。

また、dir-locals.el からコードを実行する簡単な方法はありますか? 安全ではないことはわかっていますが、構成にあるコードである可能性もあります-ポイントは、dir-locals の変数が処理されるとき (ファイルを開くとき) にのみ呼び出すことです。

手伝ってくれてありがとう。

4

3 に答える 3

8

では.dir-locals.el、変数を特定の値にのみ設定できます。コードが行うことは、major-mode変数をc-mode値に設定することです。ただし、これはモードをアクティブにする方法ではありません。それを有効にするには、関数を呼び出す必要がありますc-mode。関数を実行するために設定できる特別な変数があり.dir-locals.elます: eval.

したがって、次のコードが機能します。

((nil . ((eval . (c-mode)))))
于 2013-08-14T14:13:58.337 に答える
2

私はあなたの最初の質問に答えることはできません (実際、私自身がその答えを聞きたいと思っています) auto-mode-alist

(setq auto-mode-alist (cons '("<your dir path here>\." . c-mode) auto-mode-alist))`

これにより、必要な結果が得られるはずです

于 2013-08-14T13:12:32.253 に答える