我如何才能使Emacs重新加载所有更新的定义,.emacs
而无需重新启动Emacs?
我如何才能使Emacs重新加载所有更新的定义,.emacs
而无需重新启动Emacs?
Answers:
您可以使用命令load-file(M-x load-file
,然后按两次return键以接受默认文件名,即正在编辑的当前文件)。
您也可以将点移动到任何sexp的末尾,然后按C-xC-e即可执行该sexp。通常,如果只更改一两行,则不必重新加载整个文件。
defun
or 后面defvar
,也可以将其保留在声明主体中并键入C-M-x
。非常便利。
很奇怪,很方便
M-x eval-buffer
这里没有提到。
如果您.emacs
是幂等的,它将立即评估缓冲区中的所有代码,这是最快的方法。
.emacs
是(或必须是)幂等的?
.emacs
不成为幂等?
通常,您只需重新评估更改的区域即可。标记〜/ .emacs的区域,然后使用M-x eval-region RET
。这通常比重新评估整个文件更安全,因为编写.emacs文件很容易,该文件在两次加载后无法正常工作。
如果您在当前活动的缓冲区中打开了.emacs文件,请执行以下操作:
MX评估缓冲区
M-x load-file
~/.emacs
M-: (load user-init-file)
Eval:
提示符下输入它(包括括号)user-init-file
是~/.emacs
默认情况下包含值(指向配置文件路径)的变量 (load)
是的较短,较旧且非交互式的版本(load-file)
;它不是emacs命令(要输入M-x),而仅仅是elisp函数M-:
> M-x
其他人已经按照您的说明回答了您的问题,但是我发现我通常想执行我刚刚编写的行。为此,CtrlAltx在Lisp中工作正常。
eval-lastsexp
,在C-x C-e
C-M-x
,您不必处于“崩溃的尽头”-您是否在考虑C-x C-e
?有趣的C-M-x
是,即使point在函数/变量声明的中间,您也可以调用它。
我建议您一开始不要这样做。相反,请启动一个新的emacs会话并测试您所做的任何更改以查看它们是否正常运行。这样做的原因是避免使您处于无法运行的.emacs文件状态,该文件无法加载或无法干净加载。如果您在原始会话中进行了所有编辑,而在新会话中进行了所有测试,则始终可以得到可靠的注释掉有害代码的工具。
当您最后对更改感到满意时,请继续使用其他答案之一重新加载。我个人的喜好是eval
仅添加/更改的部分,然后仅突出显示添加/更改的代码和call的区域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
这是一种快速简便的方法来快速测试您的配置。您还可以C-x C-e
在特定的Lisp末尾使用来单独执行某些功能。
Cx Ce运行命令eval-last-sexp(在global-map中找到),它是一个交互式的已编译Lisp函数。
它绑定到Cx Ce。
(eval-last-exp EVAL-LAST-SEXP-ARG-INTERNAL)
先评估性爱;回显区域中的打印值。使用prefix参数交互地将输出打印到当前缓冲区中。
通常,此函数根据变量'eval-expression-print-length'和'eval-expression-print-level'的值截断长输出。但是,如果前缀参数为零,则不存在这种截断。这样的前缀参数还会使整数以几种其他格式(八进制,十六进制和字符)打印。
如果“ eval-expression-debug-on-error”为非零(默认值),则此命令安排所有错误进入调试器。
除了Mx eval-buffer或Mx加载文件之类的命令之外,您还可以从命令行重新启动新的emacs:
emacs -q --load "init.el"
用法示例stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/
您可以像这样为emacs设置键绑定
;; reload emacs configuration
(defun reload-init-file ()
(interactive)
(load-file "~/.emacs"))
(global-set-key (kbd "C-c r") 'reload-init-file)
希望这会有所帮助!