19

我在一些主要模式中有一个缓冲区,在另一个缓冲区中有模式文件本身(* .el)。编辑 *.el 文件后,我想查看第一个缓冲区中反映的更改,而无需重新启动 emacs。我尝试运行 -mode 函数,但它没有更改缓冲区。谢谢

4

3 回答 3

32

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

M-x unload-feature RET foo-mode RET

然后像往常一样再次加载模式(foo-mode如果您有适当的自动加载,则使用,或者使用load-libraryload-file其他方式)。

于 2010-12-05T21:22:40.970 回答
16
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需要通过在C-M-x光标位于devfar表达式中时执行或使用M-x :并输入表达式。有关在 Emacs 中评估 lisp 的文档,请参阅此页面

于 2010-12-05T21:13:37.813 回答
1

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

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

这也适用于模式定义,但通常使用 Mx 模式名称调用模式是作为切换实现的:你调用它一次,它激活模式,你再次调用它,它取消激活模式。所以你可能需要做两次 Mx mode-name 。

于 2010-12-05T17:15:53.440 回答