进行更改以使所有受影响的缓冲区都能接收到这些更改时,重新加载.emacs文件的最快方法是什么?


27

我知道C-x C-e这是eval-last-sexpM-x eval-buffer,但这些并不总是足以拿起所有的变化。有时,您实际上需要关闭配置已更改的模式下的缓冲区,而有时您需要完全重新启动emacs。有没有更一般的方法来处理此问题?或者,是否有一种方法可以在不丢失现有打开的缓冲区和交互式历史记录的情况下重新启动emacs?


就像@ b4hand最初指出的那样,这实际上是一个基于提案问题的问题:area51.stackexchange.com/proposals/76571/emacs/76588#76588
tarsius 2014年

Answers:


16

不可以,无法重新加载修改后的配置,并使Emacs表现得好像在加载Emacs时已经进行了这些修改。简而言之,Emacs软件包为此拥有太多的自由。

您提到有些主要模式无法进行配置更改。造成这种情况的可能原因是,启用该模式会根据某些选项的当前值设置一些缓冲区局部变量。如果不在使用它的每个缓冲区中重新启用这种模式,则不会拾取所有更改。即使那样,某些事情仍然很有可能保持不变。当使用custom-set-variables表单自定义选项时,这种工作的几率更高,但是必须为每个选项显式实现。到目前为止,我们仅讨论了主要模式及其选择...

您可以尝试实施命令以重新启用每个缓冲区的主模式。但是不太可能完全启用所有更改,更糟的是它将禁用您手动启用的所有次要模式,并丢失所有其他状态。

出于这个原因,我什至建议eval-buffer您完全不要对您的init文件进行操作,以获取尽可能多的更改。使用分别评估更改的设置eval-last-sexp,如果这样做不起作用,那么您必须重新启动Emacs。

关闭Emacs时如何保存状态是一个不同的问题,应单独询问。


我在这里提出的重启问题:emacs.stackexchange.com/questions/639/...
b4hand

3

有时您实际上需要关闭配置已更改的模式下的缓冲区

normal-mode如果已更改给定缓冲区或其关联的挂钩,则调用是重新触发给定缓冲区的所有模式的有用方法。

您还可以使用revert-buffer(调用normal-mode),这有点像在不丢弃撤消历史记录的情况下重新加载文件。

(您也可以使用来重新加载文件C-xC-v,但这放弃您的撤消历史记录。)

M-x ibuffer输入大写V,则所有标记的缓冲区,而大写EW使您能够计算任意elisp的所有标记的缓冲区。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.