如何在更改后重新加载.emacs?

Zub*_*air 360 emacs

如何在.emacs不重新启动Emacs的情况下让Emacs重新加载我已更新的所有定义?

Bry*_*ley 328

您可以使用命令load-file(M-x load-file然后按两次return键接受默认文件名,即正在编辑的当前文件).

您也可以将该点移动到任何性别的结束并按下C-xC-e以执行该性别.通常,如果您只是更换一两行,则无需重新加载整个文件.

  • 请记住,这可能并不总是完全符合您的想法.如果你有变量的内容被翻转(即设置一个布尔值为相反的),那么行为将与加载文件的行为不同. (21认同)
  • 一般来说,任何副作用都可能会破坏所需的行为:加载文件等. (4认同)
  • 除了将点移动到“ defun”或“ defvar”的后面,还可以将其保留在声明主体内并键入“ CMx”。非常便利。 (2认同)

Pet*_*ter 144

非常奇怪,非常方便

M-x eval-buffer

这里没有提到.

如果你.emacs是幂等的,它会立即评估缓冲区中的所有代码,它是最快的方法.

  • @mike:什么时候`.emacs`不是幂等的才有意义? (7认同)
  • 谁说'.emacs`是(或必须)是幂等的? (3认同)
  • @迈克:不是我。“给定 a,b 为真”对我来说意味着“如果 a,b 为真”,但我明白你的意思。为了更清楚起见,我将给定更改为 if 。 (2认同)
  • 我不会说这是好的风格,但它可能会发生。例如,如果函数已经定义(从第一次启动),您可以选择不重新定义它。在评估 init 文件时,您可能看不到其定义的变化。 (2认同)

Dal*_*und 42

您通常只需重新评估更改的区域.标记您已更改的〜/ .emacs区域,然后使用M-x eval-region RET.这通常比重新评估整个文件更安全,因为编写一个在加载两次后不能正常工作的.emacs文件很容易.

  • 有趣.我没有考虑过非幂等的.emacs文件的想法.当我从ELisp开始时需要注意的事项 (2认同)
  • 我猜想很难找到一个*is*幂等的.emacs文件,至少在两次执行的强烈意义上导致与一次执行完全相同的状态.至少,附加到各种列表是很常见的,通常是在第二次执行时不会抑制重复条目的方式. (2认同)

Dom*_*ger 38

如果您在当前活动的缓冲区中打开了.emacs文件:

M-x eval-buffer

  • 这里要注意的一件事是,执行此操作*可能*不会使您处于与重启方法相同的状态.(已解释的示例:如果您的.emacs中有"切换"影响). (12认同)

dig*_*mer 27

M-x load-file
~/.emacs
Run Code Online (Sandbox Code Playgroud)

  • 通过这样做,我了解到在 Windows 7 安装中,.emacs.d 文件夹位于 %appdata% 文件夹中,而不是用户主文件夹中。 (2认同)

Pac*_*ace 13

以下应该这样做......

M-x load-file
Run Code Online (Sandbox Code Playgroud)


Bah*_*bar 11

其他人已经按照说明回答了你的问题,但我发现我通常想要执行我刚写的那些行.为此,CtrlAltx在lisp工作正常.

  • 另见`eval-lastsexp`,在`Cx Ce` (3认同)

Mat*_*ser 9

键盘快捷键:

(defun reload-init-file ()
  (interactive)
  (load-file user-init-file))

(global-set-key (kbd "C-c C-l") 'reload-init-file)    ; Reload .emacs file
Run Code Online (Sandbox Code Playgroud)


小智 9

M-: (加载user-init-file)


笔记

  • 你在(load user-init-file)提示符中键入它(包括括号)
  • Eval:user-init-file默认情况下保存值(指向配置文件路径)的变量
  • ~/.emacs是更短,更老,非交互的版本(load); 它不是emacs命令(要输入M-x),而只是一个elisp函数

结论

(load-file) > M-:

  • 是 M-: > Ctrl Alt x?根据你的逻辑,我想象 M-: < CMx 当初始化文件中只更改一行时?也许只是== (2认同)

Joe*_*nte 7

我建议你最初不这样做.相反,启动一个新的emacs会话并测试您所做的任何更改,看它们是否正常工作.这样做的原因是为了避免让您处于无法运行的.emacs文件的状态,该文件无法加载或无法正确加载.如果您在原始会话中进行了所有编辑,并且在新会话中进行了所有测试,那么您始终可以使用可靠的方法来评论有问题的代码.

当您对更改感到满意时,请继续使用其中一个其他答案重新加载.我个人的偏好eval仅仅是您添加/更改的部分,并且只是突出显示已添加/更改的代码和调用的区域M-x eval-region.正如luapyad指出的那样,这样可以最大限度地减少评估的代码,最大限度地减少任何无意的副作用.


Wis*_*ion 7

C-x C-e ;; current line
M-x eval-region ;; region
M-x eval-buffer ;; whole buffer
M-x load-file ~/.emacs.d/init.el
Run Code Online (Sandbox Code Playgroud)


jac*_*acz 5

在您的初始化文件中定义它并通过Mx reload-user-init-file调用

(defun reload-user-init-file()
  (interactive)
  (load-file user-init-file))
Run Code Online (Sandbox Code Playgroud)