【发布时间】:2010-12-05 16:00:52
【问题描述】:
我在某个主模式下有一个缓冲区,而在另一个缓冲区中则是模式文件本身 (*.el)。编辑 *.el 文件后,我想查看第一个缓冲区中反映的更改,而无需重新启动 emacs。我尝试运行 -mode 函数,但它没有更改缓冲区。 谢谢
【问题讨论】:
标签: emacs reloading major-mode
我在某个主模式下有一个缓冲区,而在另一个缓冲区中则是模式文件本身 (*.el)。编辑 *.el 文件后,我想查看第一个缓冲区中反映的更改,而无需重新启动 emacs。我尝试运行 -mode 函数,但它没有更改缓冲区。 谢谢
【问题讨论】:
标签: emacs reloading major-mode
如果您的模式使用(provide 'foo-mode) 提供了一项功能(应该如此!),那么您可以
M-x unload-feature RET foo-mode RET
然后像往常一样再次加载模式(如果您有适当的自动加载,则使用 foo-mode,否则使用 load-library 或 load-file)。
【讨论】:
M-x unload-feature RET web-mode RET,但出现错误:Loaded libraries (\"/home/kuba/.emacs\") depend on /home/kuba/projects/emacs-modes/web-mode/web-mode.el 我的 .emacs 中有 (require 'web-mode)
C-u M-x unload-feature RET web-mode RET 可以解决问题。根据C-h f unload-feature RET,这会强制卸载操作。
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 的文档,请参阅 this page。
【讨论】:
M-x normal-mode
当您编辑模式的源代码时,您必须确保评估您更改的函数——仅将它们保存到文件是不够的,因为 Emacs 内部仍将使用旧代码。
例如,您可以跳到使用 M-C-e 处理的函数定义的末尾,并使用 C-x C-e 评估该函数。从那时起,Emacs 将使用当前定义。
这也适用于模式定义,但通常使用 M-x 模式名称调用模式是作为切换实现的:你调用一次,它激活模式,你再次调用它,它取消激活模式。所以你可能不得不做两次 M-x mode-name。
【讨论】: