ChatGPT解决这个技术问题 Extra ChatGPT

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

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

我知道 emacs 通常被认为是一个操作系统,但是...s/reboot/restart/?
我不是开发人员,所以很多对开发人员立即有意义的答案对我来说意义不大
@MJB Stack Overflow 的目的是成为即使是最基本的问题的知识库。这个问题完全符合 Stack Overflow 的目的。请参阅stackoverflow.com/faq
哈哈现在五年后建议的“谷歌搜索优先”在这里引导!好的

p
programking

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

您也可以将点移动到任何 sexp 的末尾,然后按 C-xC-e 来执行该 sexp。如果您只是更改一两行,通常不需要重新加载整个文件。


请记住,这可能并不总是完全按照您的想法进行。如果您有内容被翻转的变量(即,将布尔值设置为相反),那么行为将与加载文件不同。
一般来说,任何副作用都可能会破坏所需的行为:加载文件等。
当我这样做时,我收到消息: load-with-code-conversion: Symbol's value as variable is void: n
除了将点移动到 defundefvar 之后,您还可以将其留在声明正文中并键入 C-M-x。非常便利。
M-x load-file 然后用 ~/.emacs 代替默认值呢?
P
Peter

很奇怪 很方便

Mx eval-buffer

这里不提。

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


谁说 .emacs 是(或必须是)幂等的?
@mike:不是我。 “鉴于 a, b 为真”对我来说意味着“如果 a,b 为真”,但我明白你的意思。为了更清楚,我改为 if 。
@mike:什么时候 .emacs 不是幂等的?
我会认为这是第一个建议。
我不会说这是好的风格,但它可能会发生。例如,如果函数已经定义(从第一次启动开始),您可以选择不重新定义函数。在评估您的 init 文件时,您可能看不到其定义的变化。
D
Dale Hagglund

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


有趣的。我没有考虑过非幂等的 .emacs 文件的想法。开始使用 ELisp 时需要注意的事项
我想很难找到一个幂等的 .emacs 文件,至少在两次执行的强烈意义上会导致与一次执行完全相同的状态。至少,附加到各种列表是很常见的,通常以在第二次执行时不会抑制重复条目的方式。
另一种想法:使用我上面建议的方法,您拥有的 emacs 状态可能不是您的 .emacs 实际所做的。即,由于您没有从头开始执行整个 .emacs 文件,因此您实际上并不知道它做了您想要的。
话虽这么说,难道不能以幂等的方式编写 .emacs 吗?全局状态很恶心。
D
Dominic Rodger

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

M-x eval-buffer

这里要注意的一件事是,这样做可能不会让您处于与重新启动方法相同的状态。 (人为的示例:如果您的 .emacs 中有“切换”影响)。
d
digitaldreamer
M-x load-file
~/.emacs

这样做我了解到,在我的 Windows 7 安装中,.emacs.d 文件夹位于 %appdata% 文件夹中,而不是用户主文件夹中。
佚名

解决方案

M-: (load user-init-file)

笔记

你在 Eval: 提示符中输入它(包括括号)

user-init-file 是一个默认保存 ~/.emacs 值(指向配置文件路径)的变量

(load) 是 (load-file) 的更短、更旧和非交互式版本;它不是一个 emacs 命令(在 Mx 中输入),而只是一个 elisp 函数

结论

M-: > M-x


是 M-: > Ctrl Alt x?根据您的逻辑,我想 M-: < CMx 当初始化文件中只有一行被更改时?也许只是==
B
Bahbar

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


另请参阅 eval-lastsexp,位于 C-x C-e
使用 C-M-x,您不必“处于 lisp 的末尾”——您可能在考虑 C-x C-e 吗? C-M-x 的好处在于,即使 point 位于函数/变量声明的中间,您也可以调用它。
在我只使用 Cx Ce 的时候,我可能已经养成了结束 lisp 的习惯。感谢您的捕获!
D
Dominic Rodger

以下应该这样做...

M-x load-file

J
Joe Casadonte

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

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


R
Radon Rosborough

键盘快捷键:

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

(global-set-key (kbd "C-c C-l") 'reload-init-file)    ; Reload .emacs file

W
WisdomFusion
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

j
jacekmigacz

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

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

这实际上是我的首选答案:获取存在的东西,并使其可以通过 Mx 访问(而不是 M-: 和额外的输入)。 Mx 确实是访问有用命令的正常方式,这些命令并不常见,不值得拥有自己的键绑定。
最佳答案,因为如果您的配置位于 ~/.config/emacs/ 而不是 ~/.emacs.d/ 中,它也可以工作
A
AAAfarmclub

我目前使用的是 Ubuntu 15.04;我喜欢为此定义一个键。 [M-insert] 在我的键盘上转换为 alt-insert。把它放在你的 .emacs 文件中:

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

P
Picaud Vincent

除了 Mx eval-buffer 或 Mx load-file 之类的命令,您还可以从命令行重新启动新的 emacs:

emacs -q --load "init.el"

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


该问题询问如何在不重新启动 Emacs 的情况下执行此操作。发布新副本,同时 technically 回答问题,似乎不符合问题的精神。 😄
u
user1026139

虽然 M-x eval-buffer 会起作用,但您可能会遇到切换和其他类似问题的问题。更好的方法可能是“标记”或突出显示 .emacs 中的新内容(如果您只是在搞乱,甚至是暂存缓冲区),然后是 M-x eval-region。希望这可以帮助。


X
X.Creates

这是快速测试配置的快速简便的方法。您还可以在特定 lisp 的末尾使用 C-x C-e 来单独执行某些功能。

Cx Ce 运行命令 eval-last-sexp(在 global-map 中找到),这是一个交互式编译的 Lisp 函数。它与 Cx Ce 绑定。 (eval-last-sexp EVAL-LAST-SEXP-ARG-INTERNAL) 在点之前评估 sexp;在回声区打印值。交互式地,使用前缀参数,将输出打印到当前缓冲区。通常,此函数根据变量“eval-expression-print-length”和“eval-expression-print-level”的值截断长输出。但是,如果前缀参数为零,则不存在这样的截断。这样的前缀参数还会导致整数以几种其他格式(八进制、十六进制和字符)打印。如果 'eval-expression-debug-on-error' 为非 nil(默认值),则此命令安排所有错误进入调试器。


V
Vinh Trieu

您可以像这样为 emacs 设置键绑定

;; reload emacs configuration
(defun reload-init-file ()
  (interactive)
  (load-file "~/.emacs"))

(global-set-key (kbd "C-c r") 'reload-init-file) 

希望这会有所帮助!


b
benjaminz

如果你碰巧在 Emacs 中打开了一个 shell,你也可以这样做:

. ~/.emacs

可以节省几个按键。