2010-12-05 8 views
16

私はいくつかのメジャーモードでバッファを持ち、別のバッファでモードファイル自体(* .el)を持っています。 * .elファイルを編集した後、最初のバッファに反映された変更を確認したいので、emacsを再起動する必要はありません。私は、-mode関数を実行しようとしましたが、バッファを変更しませんでした。 ありがとうemacsメジャーモードをリロードするには?

答えて

0

モードのソースを編集するときは、内部でEmacsが古いコードを使用するため、ファイルを単独で保存するだけでは不十分です。

たとえば、M-C-eで作業している関数定義の最後にジャンプし、関数をC-x C-eで評価することができます。その時点から、Emacsは現在の定義を使用します。

これはモード定義でも機能しますが、Mx mode-nameのモードを呼び出すときは、トグルとして実装されます。一度呼び出すと、モードをアクティブにし、再度呼び出して、モードを無効にします。 。だから、あなたはM-xモード名を2回しなければならないかもしれません。

+0

elispを(再)評価するすべての方法については、http://www.masteringemacs.org/articles/2010/11/29/evaluating-elisp-emacs/ – phils

14
M-x load-file your-mode.el 

または

M-x eval-buffer 

はその後、おそらく

M-x your-mode 
M-x your-mode 

を行うことによって、バッファ内のオンとオフ動作を切り替えるか、あなたのモードは、前置引数を認識した場合

C-u 1 M-x your-mode 

注:あなたがdefvarのファイルは既存の値を上書きしないので、呼び出しの値をdefvarに変更する場合は、CMxの式をdevfarの式で実行するか、 Mx:と入力してください。 Emacsでlispを評価する方法については、this pageを参照してください。 (provide 'foo-mode)を使用して

+1

を参照してください。モードを切り替えるのではなく、 'Mx normal-mode'を実行してください – scottfrazer

26

あなたのモードが機能を提供している場合(それが必要として!)あなたは適切な自動ロードを持っているならば、あなたはその後、

M-x unload-feature RET foo-mode RET

とはfoo-modeを使用して(通常通り、再びモードをロードすることができ、またはload-libraryを使用しますか、それ以外の場合はload-file)。

+3

私は以前これを見ていませんでした。ドキュメンテーションは、機能を必要とする他のロードされたコードがある場合にはエラーを発生させますが、プレフィックスargを使用して強制的にアンロードすることができます。 – phils

+0

モジュールをリロードしても、他のモジュールが古い関数定義を参照し続ける可能性があるため、他のロードされたコードがモジュールを使用するケースを認識すると便利です。この場合、新しい定義を参照するように他のモジュールもリロードする必要があります。 –

+0

+1、これはトレイジャクソンの答えと組み合わせて、私のためにそれをしました。 –

関連する問題