変更を加えたときに.emacsファイルをリロードして、影響を受けるすべてのバッファーがそれらの変更を取得する最速の方法は何ですか?


27

私はC-x C-eどちらがeval-last-sexpとであるかを知ってM-x eval-bufferいますが、これらはすべての変更を取得するのに必ずしも十分ではありません。場合によっては、構成を変更したモードにあるバッファーを実際に閉じる必要があります。また、emacsを完全に再起動する必要がある場合もあります。この問題を処理するより一般的な方法はありますか?あるいは、既存の開かれたバッファとインタラクティブな履歴を失うことなくemacsを再起動する方法はありますか?


@ b4handが最初に述べたように、これは基本的に提案の質問の1つに基づく質問です。area51.stackexchange.com
proposals

回答:


16

いいえ、変更された設定をリロードし、Emacsがロードされたときにそれらの変更がすでに配置されているかのようにEmacsを動作させることはできません。要するに、Emacsパッケージはこれを実行するにはあまりにも多くの自由があります。

あなたは、いくつかの主要なモードが設定の変更を認識しないことに言及しています。これの考えられる理由は、モードを有効にすると、特定のオプションの現在の値に基づいていくつかのバッファローカル変数が設定されることです。そのようなモードを使用するすべてのバッファでこのモードを再度有効にしないと、すべての変更が取得されるわけではありません。そして、それでも、一部のものが変更されないままになる可能性は十分にあります。custom-set-variablesフォームを使用してオプションをカスタマイズすると、この動作の確率は高くなりますが、これは各オプションごとに明示的に実装する必要があります。これまでのところ、メジャーモードとそのオプションについてのみ説明しました...

各バッファのメジャーモードを再度有効にするコマンドを実装することもできます。しかし、すべての変更を完全に有効にする可能性は低く、さらに悪いことに、手動で有効にしたすべてのマイナーモードが無効になり、他のすべての状態が失われます。

そのためeval-buffer、可能な限り多くの変更を取得するために、initファイルをまったく使用しないことをお勧めします。を使用して変更された設定を個別に評価し、それが機能eval-last-sexpしない場合は、Emacsを再起動する必要があります。

Emacsを閉じたときに状態を保持する方法は別の質問であり、個別に質問する必要があります。


私はここで、再起動の質問をしてきました:emacs.stackexchange.com/questions/639/...
b4hand

3

場合によっては、構成を変更したモードにあるバッファーを実際に閉じる必要があります

呼び出しnormal-modeは、それらまたは関連するフックに変更を加えた場合に、特定のバッファーのすべてのモードを再トリガーする便利な方法です。

revert-buffer(を呼び出すnormal-mode)を使用することもできます。これは、元に戻す履歴を破棄せずにファイルをリロードするようなものです。

(ファイルをC-xC-vでリロードすることもできますが、それ元に戻す履歴破棄します。)

ではM-x ibuffer大文字入力Vすべて大文字ながら、バッファをマークし戻しますEW、すべてのマークされたバッファの任意のelispを評価することができますし。

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