为所有活动的缓冲区重新加载.emacs文件

13

已经有人提出了一个问题如何在更改.emacs文件后重新加载它

建议的解决方案是使用 M-x load-fileM-x eval-region RET 在更改后的区域上操作。

对我来说,这两种解决方案都不会影响其他打开的缓冲区。是否有一种方法可以重新加载所有打开的缓冲区的.emacs文件?

我还应该注意到,由于答案中的评论所概述的原因M-x load-file没有产生期望的效果。

2个回答

18

你的 .emacs 文件是一个全局配置,仅在评估一次时得到执行。它不会针对每个缓冲区单独应用。

你实际上可以如何实现你想要的结果,这真的取决于那些 .emacs 更改是什么。有些 elisp 仅在第一次评估时生效;或者当缓冲区更改主要模式时;或者当加载文件时等等...

如果你想重新加载一些或所有文件缓冲区,ibuffer 就可以很容易地实现:

  • M-x ibuffer RET 来启动 ibuffer(我建议将其绑定到 C-xC-b)。
  • /f.RET 来按文件名正则表达式过滤 . 以匹配任何文件名。
  • m(默认选项为 [default])来标记所有已过滤的缓冲区。
  • V(大写)来还原所有已标记的缓冲区。

或者你可以使用 M-x ibuffer-mark-by-file-name-regexp RET . RET 替换 2+3 步骤。你可以将该命令绑定到 *f:

;; Bind `ibuffer-mark-by-file-name-regexp' to *f
(eval-after-load "ibuffer"
  '(define-key ibuffer-mode-map (kbd "* f") 'ibuffer-mark-by-file-name-regexp))

输入*c-h,可以查看所有默认绑定的其他ibuffer-mark-*命令。


3
这可能让您感觉到这是一种蛮力方法,但
  • it will certainly reload your init file (consider alternatives to .emacs)
  • it will reload all open buffers (provided you are using desktop, which you should)
  • it is easy

    C-x C-c
    emacs --debug-init &
    

1
请注意,desktop.el 将还原某些内容(例如主要和次要模式以及本地变量),使它们恢复到最初的状态,而不是像新创建缓冲区时那样。如果目标是将新设置应用于这些缓冲区,则可能会受到阻碍。 - phils

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接