如何重新加载emacs主模式?
我在一些主要模式中有一个缓冲区,在另一个缓冲区中有模式文件本身(*.el)。编辑*.el文件后,我希望看到第一个缓冲区中反映的更改,而无需重新启动emacs。我试图运行-mode函数,但它没有改变缓冲区。如何重新加载emacs主模式?,emacs,reloading,major-mode,Emacs,Reloading,Major Mode,我在一些主要模式中有一个缓冲区,在另一个缓冲区中有模式文件本身(*.el)。编辑*.el文件后,我希望看到第一个缓冲区中反映的更改,而无需重新启动emacs。我试图运行-mode函数,但它没有改变缓冲区。 谢谢当您编辑模式的源代码时,您必须确保您对所更改的函数进行了评估——仅将它们保存到文件中是不够的,因为Emacs内部仍将使用旧代码 例如,您可以跳转到使用M-C-e处理的函数定义的末尾,并使用C-x C-e对函数进行求值。从那时起,Emacs将使用当前定义 这也适用于模式定义,但通常情况下,使
谢谢当您编辑模式的源代码时,您必须确保您对所更改的函数进行了评估——仅将它们保存到文件中是不够的,因为Emacs内部仍将使用旧代码 例如,您可以跳转到使用M-C-e处理的函数定义的末尾,并使用C-x C-e对函数进行求值。从那时起,Emacs将使用当前定义 这也适用于模式定义,但通常情况下,使用M-x模式名称调用模式是作为切换实现的:您调用它一次,它会激活模式,您再次调用它,它会取消激活模式。因此,您可能需要执行两次M-x模式名称
M-x load-file your-mode.el
或
然后在缓冲区中打开和关闭行为,大概是通过
M-x your-mode
M-x your-mode
或者,如果模式识别前缀参数
C-u 1 M-x your-mode
注意:加载文件时,
defvar
不会覆盖现有值,因此,如果将调用中的值更改为defvar
,则需要特别评估这些值,或者在光标位于devfar
表达式中时执行C-M-x,或者使用M-x:并键入表达式。有关在Emacs中评估lisp的文档,请参阅。如果您的模式使用(提供'foo模式)
提供了一个功能(应该如此!),那么您可以
M-x卸载功能RET foo模式RET
然后再次以正常方式加载模式(如果您有合适的自动加载,则使用
foo模式
,或者使用load library
或load file
否则)。除了切换模式外,您还可以执行M-x正常模式
我以前从未见过这种情况。文档中指出,如果有其他加载的代码需要此功能,这将引发错误,但您可以使用前缀arg强制卸载。了解其他加载的代码使用模块的情况非常有用,因为即使重新加载模块,另一个模块可能会继续引用旧的函数定义。在这种情况下,您也需要重新加载另一个模块,以便它引用新的定义。+1,结合Trey Jackson的回答,这为我做到了。我尝试了M-x卸载功能RET web mode RET
,但出现了错误:加载的库(\“/home/kuba/.emacs\”)依赖于/home/kuba/projects/emacs modes/web mode/web mode.el
我的电脑中有(需要“web mode”)
。emacs@jcubicC-u M-x卸载功能RET web模式RET
将实现此功能。根据C-h f卸载功能RET,这将强制卸载操作。有关(重新)评估elisp的所有不同方法,请参阅
C-u 1 M-x your-mode