如何让Emacs重新加载我在.emacs中更新的所有定义而不重新启动Emacs?
.emacs
下面就应该做到了…
M-x load-file
如果你在当前活动缓冲区中打开了.emacs文件:
M-x eval-buffer
其他人已经回答了你的问题,但我发现我通常想执行我刚刚写的行。为此,lisp中的CtrlAltx工作得很好。
我建议你一开始不要这样做。相反,启动一个新的emacs会话并测试您所做的任何更改,以查看它们是否正常工作。这样做的原因是为了避免让您处于无法操作.emacs文件的状态,该文件无法加载或无法干净地加载。如果在原始会话中进行所有的编辑,在新会话中进行所有的测试,那么总有一些可靠的东西可以注释掉有问题的代码。
当您最终对更改感到满意时,继续使用其他答案之一重新加载。我个人的偏好是eval只是你添加/更改的部分,要做到这一点,只需要突出显示添加/更改的代码区域并调用M-x eval-region。luapyad指出,这样做可以最大限度地减少所评估的代码,最大限度地减少任何无意的副作用。
eval
M-x eval-region
您可以使用命令load-file (m x load-file,然后按return两次以接受默认文件名,即当前正在编辑的文件)。
load-file
你也可以把这个点移动到任何性别p的末尾,然后按cx一部来执行那个性别p。如果您只是更改一两行,通常不需要重新加载整个文件。
M-x load-file ~/.emacs
你通常可以重新计算改变的区域。标记~/区域。emacs,然后使用M-x eval-region RET。这通常比重新评估整个文件更安全,因为很容易编写一个.emacs文件,在加载两次后就不能正常工作。
M-x eval-region RET
虽然M-x eval-buffer可以工作,但你可能会在切换和其他类似的事情上遇到问题。更好的方法可能是“标记”或突出显示.emacs中的新内容(如果你只是瞎折腾,甚至是刮擦缓冲区),然后M-x eval-region。希望这能有所帮助。
在init文件中定义它并通过m x reload-user-init-file调用
(defun reload-user-init-file() (interactive) (load-file user-init-file))
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
很奇怪,很方便
m x eval-buffer
eval-buffer
这里没有提到。
它立即计算缓冲区中的所有代码,如果你的.emacs是幂等的,这是最快的方法。
(global-set-key [M-insert] '(lambda() (interactive) (load-file "~/.emacs")))
这里有一个快速和简单的方法来快速测试您的配置。你也可以在特定的lisp语句末尾使用C-x C-e来单独执行某个函数。
C-x C-e
C-x C-e执行eval-last-sexp命令(在global-map中找到) 它与C-x - C-e成键。 (eval-last-sexp EVAL-LAST-SEXP-ARG-INTERNAL) 在点之前评估sexp;在回显区打印值。 以交互方式,带前缀参数,输出到当前缓冲区 通常,这个函数根据值截断长输出 变量' eval-expression-print-length '和 “eval-expression-print-level”。如果前缀参数为0, 然而,没有这样的截断。还有这样的前缀参数 使整数以几种其他格式(八进制、 . 16进制和字符) 如果' eval-expression-debug-on-error '非nil,这是默认值, 该命令安排所有错误进入调试器
C-x C-e执行eval-last-sexp命令(在global-map中找到)
它与C-x - C-e成键。
(eval-last-sexp EVAL-LAST-SEXP-ARG-INTERNAL)
在点之前评估sexp;在回显区打印值。 以交互方式,带前缀参数,输出到当前缓冲区
通常,这个函数根据值截断长输出 变量' eval-expression-print-length '和 “eval-expression-print-level”。如果前缀参数为0, 然而,没有这样的截断。还有这样的前缀参数 使整数以几种其他格式(八进制、
如果' eval-expression-debug-on-error '非nil,这是默认值, 该命令安排所有错误进入调试器
键盘快捷键:
(defun reload-init-file () (interactive) (load-file user-init-file)) (global-set-key (kbd "C-c C-l") 'reload-init-file) ; Reload .emacs file
如果你碰巧在Emacs内部打开了一个shell,你还可以这样做:
. ~/.emacs
可以节省一些按键。
您可以像这样为emacs设置键绑定
;; reload emacs configuration (defun reload-init-file () (interactive) (load-file "~/.emacs")) (global-set-key (kbd "C-c r") 'reload-init-file)
希望这对你有所帮助!
除了m x eval-buffer或m x加载文件这样的命令,你可以从命令行重新启动一个新的emacs:
emacs -q --load "init.el"
使用示例:stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/
M -: (load user-init-file)
(load user-init-file)
Eval:
user-init-file
~/.emacs
(load)
(load-file)
__abc0 > __abc1