如何重新加载emacs主模式?

yuk*_*yuk 17 emacs reloading major-mode

我在某些主模式下有缓冲区,在另一个缓冲区中有模式文件本身(*.el).编辑*.el文件后,我希望看到第一个缓冲区中反映的更改,而不重新启动emacs.我试图运行-mode函数,但它没有更改缓冲区.谢谢

Gar*_*ees 28

如果您的模式提供了一个功能(应该!),(provide 'foo-mode)那么您可以

M-x unload-feature RET foo-mode RET

然后正常加载模式(foo-mode如果您有适当的自动加载,或使用load-libraryload-file以其他方式使用).

  • 我以前没见过这个.该文档指出,如果存在需要该功能的其他加载代码,则会引发错误,但您可以使用前缀arg强制卸载. (3认同)

Tre*_*son 17

M-x load-file your-mode.el
Run Code Online (Sandbox Code Playgroud)

要么

M-x eval-buffer
Run Code Online (Sandbox Code Playgroud)

然后在缓冲区中打开和关闭行为,大概是通过这样做

M-x your-mode
M-x your-mode
Run Code Online (Sandbox Code Playgroud)

或者,如果您的模式识别出前缀参数

C-u 1 M-x your-mode
Run Code Online (Sandbox Code Playgroud)

注意:当您加载文件时,defvar不会覆盖现有值,因此如果您更改调用中的值,则defvar需要通过在C-M-x光标位于devfar表达式中时执行或使用M-x :并输入表达式.有关在Emacs中评估lisp的文档,请参阅此页面.


Tho*_*mas 1

当您编辑模式的源代码时,您必须确保评估您更改的函数 - 仅将它们保存到文件中是不够的,因为 Emacs 内部仍将使用旧代码。

例如,您可以跳到使用 MCe 处理的函数定义的末尾,并使用 Cx Ce 评估该函数。从那时起,Emacs 将使用当前定义。

这也适用于模式定义,但通常使用 Mx 模式名称调用模式是作为切换实现的:您调用它一次,它会激活该模式,您再次调用它,它会停用该模式。因此您可能需要执行两次 Mx mode-name 操作。