2010-12-05 109 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