私はC-x C-e
どちらがeval-last-sexp
とであるかを知ってM-x eval-buffer
いますが、これらはすべての変更を取得するのに必ずしも十分ではありません。場合によっては、構成を変更したモードにあるバッファーを実際に閉じる必要があります。また、emacsを完全に再起動する必要がある場合もあります。この問題を処理するより一般的な方法はありますか?あるいは、既存の開かれたバッファとインタラクティブな履歴を失うことなくemacsを再起動する方法はありますか?
私はC-x C-e
どちらがeval-last-sexp
とであるかを知ってM-x eval-buffer
いますが、これらはすべての変更を取得するのに必ずしも十分ではありません。場合によっては、構成を変更したモードにあるバッファーを実際に閉じる必要があります。また、emacsを完全に再起動する必要がある場合もあります。この問題を処理するより一般的な方法はありますか?あるいは、既存の開かれたバッファとインタラクティブな履歴を失うことなくemacsを再起動する方法はありますか?
回答:
いいえ、変更された設定をリロードし、Emacsがロードされたときにそれらの変更がすでに配置されているかのようにEmacsを動作させることはできません。要するに、Emacsパッケージはこれを実行するにはあまりにも多くの自由があります。
あなたは、いくつかの主要なモードが設定の変更を認識しないことに言及しています。これの考えられる理由は、モードを有効にすると、特定のオプションの現在の値に基づいていくつかのバッファローカル変数が設定されることです。そのようなモードを使用するすべてのバッファでこのモードを再度有効にしないと、すべての変更が取得されるわけではありません。そして、それでも、一部のものが変更されないままになる可能性は十分にあります。custom-set-variables
フォームを使用してオプションをカスタマイズすると、この動作の確率は高くなりますが、これは各オプションごとに明示的に実装する必要があります。これまでのところ、メジャーモードとそのオプションについてのみ説明しました...
各バッファのメジャーモードを再度有効にするコマンドを実装することもできます。しかし、すべての変更を完全に有効にする可能性は低く、さらに悪いことに、手動で有効にしたすべてのマイナーモードが無効になり、他のすべての状態が失われます。
そのためeval-buffer
、可能な限り多くの変更を取得するために、initファイルをまったく使用しないことをお勧めします。を使用して変更された設定を個別に評価し、それが機能eval-last-sexp
しない場合は、Emacsを再起動する必要があります。
Emacsを閉じたときに状態を保持する方法は別の質問であり、個別に質問する必要があります。
場合によっては、構成を変更したモードにあるバッファーを実際に閉じる必要があります
呼び出しnormal-mode
は、それらまたは関連するフックに変更を加えた場合に、特定のバッファーのすべてのモードを再トリガーする便利な方法です。
revert-buffer
(を呼び出すnormal-mode
)を使用することもできます。これは、元に戻す履歴を破棄せずにファイルをリロードするようなものです。
(ファイルをC-xC-vでリロードすることもできますが、それは元に戻す履歴を破棄します。)
ではM-x ibuffer
大文字入力Vすべて大文字ながら、バッファをマークし戻しますEとW、すべてのマークされたバッファの任意のelispを評価することができますし。