2016-12-15 5 views
0

私自身のプロジェクトに.dir-locals.elを使用しようとしています。 しかし、永久に保存するときはいつでも、init.elの最後に保存されます。 私はそれを別の別のファイルに変更したいと思います - 例えば〜/ mydirlocals.el。.dir-local変数を別々のディレクトリに保存する方法

私にこれの解決策を教えてください。

PS:私はすでにカスタムファイルを別のものに変更しようとしました。しかし残念ながら、私のdir-local変数は他のカスタム変数で保存されていました。 これを避け、私のdir-locals変数を完全に別個のファイルに保存します。

答えて

2

.dir-locals.elファイルを更新するためにカスタマイズインターフェイスを使用することはできません。カスタマイズはあなた自身の設定です。ディレクトリローカル変数ファイルを編集/更新する場合は、そのファイルを直接編集するか、M-xadd-dir-local-variableを使用する必要があります。

後者のコマンドは、詳細を確認するメッセージを表示します。デフォルト値は、変数の値ためのプロンプトで提供されていないことに注意してください、しかし、あなたは、現在のバッファ内の変数の値を取得するためにM-Nまたは<ダウン>入力できること。

ではなく、は、現在のバッファのデフォルトディレクトリに.dir-locals.elファイルを作成または更新することを変数にローカルに問い合せます。意図したディレクトリのdiredバッファからコマンドを発行するのは当然安全なアプローチですが、あなたが変数を追加したいモードのバッファから行うこともできます。そうすれば、モードのデフォルトの提案問題の変数の現在の値は、あなたにとってより有用になります。その後、

(ディレクトリ内の適切な種類のファイルがない場合は、次のことができ、常にCxのCfの適切なファイル名の新しい/保存されていないバッファ、必要に応じてadd-dir-local-variableな回数だけを使用し、ときに」あなたが作成したバッファを保存せずに作成し直してください。)

これはすべてあなたの要求が何かを100%確実にしているとは言えません。 は、.dir-locals.elファイルのないディレクトリローカル変数を使用することもできます。代わりに、initファイルで完全に設定することもできます。

詳しくは、https://www.emacswiki.org/emacs/DirectoryVariablesを参照してください。

+0

私はあなたを混乱させて申し訳ありません。私の質問は、私のdir-local変数を別々のファイルに永久に保存する方法です。ファイルを訪れるたびに、Emacsは私が適用したいかどうかを尋ね、永久に適用します。 !を押して最後のものを選択すると(永久に適用されます)、これらの変数はinitファイルの最後に追加されます。この時点で、私はそれらをinitファイルではなく別の私の特定のファイルに保存したいと思います。そうする方法はありますか? – windrg00

+0

ああ、あなたが今質問していることを理解していると思います。 Emacsは、あなたが特定のローカル変数のように特定の値を* acceptable *として承認したという事実を保存しています。そのデータは設定する値を指定しません。 Emacsは、あなたの許可なく設定するのが安全ではないかもしれないローカル変数を設定するときに、あなたの許可を求める必要があるかどうかを単にそのデータをチェックします。 – phils

+0

Emacsに 'custom-file'以外の場所に自動的にそのデータを保存するように指示することはできませんが、もしあなたが本当に望むなら、手動でデータを別のelispファイルに移動することを止めるものはありません。'(setq 'safe-local-variable-values ...)') - あなたがinitファイルで 'load'した後、' custom-file'からデータを消去するためにcustomizeインタフェースを使います。あなたは、新しい安全な値を追加するたびにそのメンテナンスを繰り返さなければならないでしょう。だから、IMOはこれを行うのがとても迷惑でしょう。 – phils

2

免責事項:私はdir-local varsを使用していませんが、ファイルローカルvarsを使用しています。私はdir-localsが同じように動作すると推測しています。

ローカル変数は​​またはcustom.elの最後に救われていない、安全な値です。 Emacsはデフォルトでは信頼できませんが、何らかの述語が一致しない限り、それらは信頼できません。ファイルとディレクトリのローカルなので、ファイルを開くだけでEmacsが任意のコードを実行できるので、これは良い方針です。永久に適用すると、その値が安全であることをEmacsに伝えます。基本的には正確な値に一致する述語を作成し、それをカスタマイズして保存します。

プロンプト(したがって保存)を防止するには、変数を自分の述語で安全とマークする必要があります。

は例えば、私はadaptive-wrap-extra-indentは限りそれは整数だとOKであることを意味

(put 'adaptive-wrap-extra-indent 'safe-local-variable 'integerp) 

を設定します。私はこの変数をadaptive-wrapパッケージに追加したのでOKです。(安全な地元の人は当時知らなかったが、修正するためにバグを提出しましたが無視されています)明らかに、(lambda (x) t)を含む任意の述語を使用することができますが、これに対しては推奨します。

関連する問題