2010-12-05 113 views
16

我在一些主要模式下有一個緩衝區,而在另一個緩衝區有一個模式文件本身(* .el)。編輯* .el文件後,我想查看第一個緩衝區中反映的更改,而無需重新啓動emacs。我試圖運行-mode函數,但它並沒有改變緩衝區。 謝謝如何重新加載emacs主模式?

回答

0

當您編輯模式的源代碼時,您必須確保您評估您更改的功能 - 將它們單獨保存到文件是不夠的,因爲內部Emacs仍將使用舊代碼。例如,您可以跳到使用M-C-e處理的函數定義的末尾,並使用C-x C-e評估函數。從那時起,Emacs將使用當前的定義。

這也適用於模式定義,但是通常情況下,使用Mx模式名稱調用模式的操作實現爲切換:您只需調用一次,即可激活該模式,再次調用該模式,取消激活該模式。所以你可能必須做兩次M-x模式名稱。

+0

對於(重新)評估elisp的所有不同方式,請參閱http://www.masteringemacs.org/articles/2010/11/29/evaluating-elisp-emacs/ – phils 2010-12-06 03:01:38

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 

注意:當你lo在defvar不會覆蓋現有值,因此如果您將呼叫中的值更改爲defvar,則需要通過執行CMx來確定這些值是否爲devfar表達式,或者使用devfar表達式Mx:並在表達式中輸入。有關評估Emacs中的lisp的文檔,請參閱this page。使用(provide 'foo-mode)那麼你可以

M-x unload-feature RET foo-mode RET

,然後再加載模式爲正常(使用foo-mode如果你有一個適當的自動加載,或使用load-library

+1

而不是切換模式,您也可以做'Mx正常模式' – scottfrazer 2010-12-06 02:15:46

26

如果你的模式提供了一個功能(因爲它應該!)或否則爲load-file)。

+3

我以前沒見過這個。該文檔指出,如果存在需要該功能的其他加載代碼,則會引發錯誤,但您可以使用前綴arg強制卸載。 – phils 2010-12-06 02:58:47