在不重新启动 Emacs 的情况下,如何让 Emacs 重新加载我在 .emacs
中更新的所有定义?
在不重新启动 Emacs 的情况下,如何让 Emacs 重新加载我在 .emacs
中更新的所有定义?
load-file
),然后按两次Return接受默认文件名,该文件名为当前正在编辑的文件。你也可以将光标移动到任何Sexp的末尾,然后按下C-x、C-e来执行该Sexp。如果只更改一行或两行,通常不需要重新加载整个文件。M-x load-file
命令加载~/.emacs
文件来替代默认设置如何? - young_souvlaki非常方便的方法是
M-x eval-buffer
它会立即执行缓冲区中的所有代码。如果你的.emacs文件是幂等的,这是最快的方法。
.emacs
必须是幂等的(idempotent)? - mike.emacs
不满足幂等性? - Zazeval-buffer
和eval-defun
。我将它们分别绑定到C-c C-k和C-c C-c上(与SLIME相同)。我很少实际评估整个缓冲区,通常只评估我正在处理的函数或定义。 - George Kettleborough通常情况下,您只需要重新评估更改的区域。标记您已更改的~/.emacs区域,然后使用M-x eval-region RET
. 与重新评估整个文件相比,这通常更安全,因为加载两次后,很容易编写不完全正确的.emacs文件。
如果您在当前活动缓冲区中打开了您的.emacs文件:
M-x eval-buffer
M-: (load user-init-file)
Eval:
提示符中输入它(包括括号)user-init-file
是一个变量,它默认保存~/.emacs
的值(指向配置文件路径)(load)
是(load-file)
的缩写、旧版本和非交互式版本;它不是Emacs命令(要在M-x中键入),而只是一个Elisp函数M-:
> M-x
M-x load-file
~/.emacs
其他人已经按照所述回答了你的问题,但我发现我通常希望执行刚刚编写的行。
为此,在Elisp部分中使用Ctrl + Alt + X就可以了。
eval-lastsexp
,快捷键为C-x C-e
。 - Derek SlagerC-M-x
,你不必在 "lisp 的结尾" -- 也许你想到的是 C-x C-e
?C-M-x
的好处是即使光标在函数/变量声明的中间,你也可以调用它。 - ThomasM-x load-file
我建议你一开始不要这样做。相反,启动一个新的Emacs会话并测试你所做的任何更改是否能正常工作。这么做的原因是避免让你处于一个无法使用的.emacs文件状态,它可能无法加载或无法顺利地加载。如果你在原始会话中进行所有编辑,在新会话中进行所有测试,那么你将始终拥有可靠的东西来注释掉有问题的代码。
当你最终对你的更改感到满意时,然后使用其他答案之一重新加载。我的个人偏好是仅eval
已添加/更改的部分,这可以通过高亮显示添加/更改代码区域并调用M-x eval-region
来完成。这样做可以最小化评估的代码,从而使任何意外副作用最小化,正如luapyad 指出的那样。
键盘快捷键:
(defun reload-init-file ()
(interactive)
(load-file user-init-file))
(global-set-key (kbd "C-c C-l") 'reload-init-file) ; Reload .emacs file