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

如何让Emacs重新加载我在.emacs中更新的所有定义而不重新启动Emacs?

155635 次浏览

下面就应该做到了…

M-x load-file

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

M-x eval-buffer

其他人已经回答了你的问题,但我发现我通常想执行我刚刚写的行。为此,lisp中的CtrlAltx工作得很好。

我建议你一开始不要这样做。相反,启动一个新的emacs会话并测试您所做的任何更改,以查看它们是否正常工作。这样做的原因是为了避免让您处于无法操作.emacs文件的状态,该文件无法加载或无法干净地加载。如果在原始会话中进行所有的编辑,在新会话中进行所有的测试,那么总有一些可靠的东西可以注释掉有问题的代码。

当您最终对更改感到满意时,继续使用其他答案之一重新加载。我个人的偏好是eval只是你添加/更改的部分,要做到这一点,只需要突出显示添加/更改的代码区域并调用M-x eval-region。luapyad指出,这样做可以最大限度地减少所评估的代码,最大限度地减少任何无意的副作用。

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

你也可以把这个点移动到任何性别p的末尾,然后按cx一部来执行那个性别p。如果您只是更改一两行,通常不需要重新加载整个文件。

M-x load-file
~/.emacs

你通常可以重新计算改变的区域。标记~/区域。emacs,然后使用M-x eval-region RET。这通常比重新评估整个文件更安全,因为很容易编写一个.emacs文件,在加载两次后就不能正常工作。

虽然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

这里没有提到。

它立即计算缓冲区中的所有代码,如果你的.emacs是幂等的,这是最快的方法。

我现在用的是Ubuntu 15.04;我想为它定义一个键
[M-insert]翻译过来是alt-insert on my keyboard.
把它放在你的。emacs文件中:

(global-set-key [M-insert] '(lambda() (interactive) (load-file "~/.emacs")))

这里有一个快速和简单的方法来快速测试您的配置。你也可以在特定的lisp语句末尾使用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,这是默认值, 该命令安排所有错误进入调试器

键盘快捷键:

(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-bufferm x加载文件这样的命令,你可以从命令行重新启动一个新的emacs:

emacs -q --load "init.el"

使用示例:stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/

解决方案

M -: (load user-init-file)


笔记

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

结论

__abc0 > __abc1