Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修改后如何重新加载.emacs?_Emacs - Fatal编程技术网

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

修改后如何重新加载.emacs?,emacs,Emacs,如何让Emacs重新加载我在.Emacs中更新的所有定义,而不重新启动Emacs?以下内容应该可以做到这一点 M-x load-file 如果在当前活动缓冲区中打开了.emacs文件: M-x eval-buffer M-x eval buffer其他人已经回答了您的问题,但我发现我通常希望执行我刚才写的行。为此,lisp中的CtrlAltx工作得很好。我建议您最初不要这样做。相反,启动一个新的emacs会话并测试您所做的任何更改,看看它们是否正常工作。这样做的原因是为了避免使您处于无法操作的

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

以下内容应该可以做到这一点

M-x load-file

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

M-x eval-buffer
M-x eval buffer其他人已经回答了您的问题,但我发现我通常希望执行我刚才写的行。为此,lisp中的CtrlAltx工作得很好。

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


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

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


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

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

尽管
M-x eval buffer
可以工作,但您可能会遇到切换和其他类似问题。一个更好的方法可能是“标记”或突出显示.emacs中的新内容(如果你只是在胡闹,甚至可以划掉缓冲区),然后
M-x eval region
。希望这有帮助。

在您的init文件中定义它,并通过M-x reload user init file调用它

M-x load-file
~/.emacs
(defun reload-user-init-file()
  (interactive)
  (load-file user-init-file))

很奇怪,这个很方便

M-x
eval缓冲区

这里没有提到


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

我现在在Ubuntu 15.04上;我想为此定义一个键。
[M-insert]在我的键盘上转换为alt insert。
将其放入.emacs文件中:

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

下面是一个快速测试配置的简单方法。您还可以在特定lisp的末尾使用
C-x C-e
单独执行某些函数

C-x C-e运行命令eval last sexp(在全局映射中找到),该命令 是一个交互式编译的Lisp函数

它绑定到C-x C-e

(评估最后一个sexp评估最后一个sexp评估内部)

赛前评估sexp;在回显区域打印值。 以交互方式,使用前缀参数,将输出打印到当前缓冲区

通常,此函数根据值截断长输出 变量“eval expression print length”和 “评估表达式打印级别”。前缀参数为零, 然而,没有这样的截断。这样的前缀参数也是 使整数以多种其他格式打印(八进制, 十六进制和字符)

如果“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 load file这样的命令之外,您可以从命令行重新启动新的emacs:

emacs -q --load "init.el"
用法示例

解决方案 M-:
(加载用户初始化文件)


笔记
  • 您可以在
    Eval:
    prompt(包括括号)中键入它
  • 默认情况下,是一个保存
    ~/.emacs
    值(指向配置文件路径)的变量
  • 是较短、较旧且非交互式的版本;它不是一个emacs命令(在M-x中键入),而只是一个elisp函数

结论
M-:
M-x

我知道emacs通常被认为是一个操作系统,但是…s/reboot/restart/?我不是一个开发人员,所以很多对开发人员有意义的答案对开发人员来说并没有多大意义me@MJB堆栈溢出的目的是为最基本的问题提供知识库。这个问题完全符合堆栈溢出的目的。请看五年后的《哈哈现在》的可能翻版,推荐的“谷歌搜索优先”的线索在这里!请参见
eval lastsepp
,在
C-x C-e
中使用
C-M-x
,您不必“在lisp的末尾”——您是否在考虑
C-x C-e
?关于<>代码> C-MXX/CODE >的好处是,即使点在函数/变量声明的中间,也可以调用它。在我只使用C-X-C-E的时候,我可能已经习惯了LISP的结束。谢谢你的接球!这里需要注意的一点是,这样做可能不会使您处于与重启方法相同的状态。(人为的例子:如果你的.emacs中有一个“切换”效果),请记住,这可能并不总是像你认为的那样。如果变量的内容是触发器(即将布尔值设置为其相反),那么行为将与loadi不同
emacs -q --load "init.el"