关于在.emacs中加载init.el文件的问题

新装了emacs,自动生成.emacs文件,我自己创建了init.el文件 。emacs默认是从.emacs中加载配置文件的,然而我想让她从init.el文件中加载(不想删除.emacs文件,别问我为什么,舍不得)

于是我做了一下尝试:

1.在.emacs文件中加入

(load-file "C:/Users/Administrator/AppData/Roaming/.emacs.d/init.el")

然后emacs报错

Warning (initialization): An error occurred while loading ‘c:/Users/Administrator/AppData/Roaming/.emacs’:

Symbol's value as variable is void: /C:UsersAdministrator

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the ‘--debug-init’ option to view a complete error backtrace.

然后我又尝试了第二种方法

(setq load-path (cons (expand-file-name "C:/Users/Administrator/AppData/Roaming/.emacs.d/init.el")load-path))

报错是不会报错,但是加载的还是·.emacs中的代码

那么问题来了:

1.第一二句话都是设置load-path的,为什么不行呢(虽说第二句话是网上copy的,但是我也明白是什么意思)

2.这两句话不行,那么是否有办法能够完成我上面的要求呢(除了删除.emacs文件)

初学emacs,没有vim经验,略懂elisp,如果什么错误,还望海涵

load-path 是一个变量,不能当作函数来用:

(load-path "/path/to/file.el") ;; ✗

load-path 跟环境变量 PATH 一样,你不能把一个文件路径添加到其中:

(add-to-list 'load-path "/dir/file.el") ;; ✗
(add-to-list 'load-path "/dir") ;; ✔

你的问题只需:

(load "/path/to/file.el") ;; ✔

用的 load-file 没错,你应该根据提示,修复你的 Emacs 配置中的问题。

诶?第一行代码竟然不是 load-path ,可是接下来是怎么回事:

看来我已经掌握了非常的中文阅读能力😂

1 个赞

可能是路径的问题。改成下面这个试试

(load-file “//?/C:/Users/Administrator/AppData/Roaming/.emacs.d/init.el”)

明白您讲的了,可是还是不行,还是报上面的那个误错

Warning (initialization): An error occurred while loading ‘c:/Users/Administrator/AppData/Roaming/.emacs’:

Symbol's value as variable is void: /C:UsersAdministrator

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the ‘--debug-init’ option to view a complete error backtrace.

表示打错了,2333当时思维有点混乱

/C:UsersAdministrator 被转义了?

我是看的子龙山人大佬的视频做的,刚看第一节,并没有太多的配置,所以应该不是配置问题

我打的代码是

(load "C:/Users/Administrator/AppData/Roaming/.emacs.d/init.el")

应该没有被转译

你没有搞清楚问题出在哪里,你加载 init.el 的第一个方法是对的,你应该看 Emacs 给出的提示,Emacs 在提示你你的配置1有问题,它不会骗你。

配置出问题的情况很容易出现,比如一个 Typo。

假如你可以从命令行启动 Emacs 的话,加上 --debug-init 会给出一个 Backtrace,从中就能找出出错的具体位置。否则的话,在你的配置中搜索所有出现 /C:UsersAdministrator 的地方,看看有没有问题。


1 注意如果你在 .emacs 加载的其它文件(如 init.el )出了错的话,Emacs 依旧会提示你 .emacs 出了问题,这样你应该修改的是真正出问题的文件(如 init.el)。

load-file 和相对路径应该也行,在 .emacs 中写:

(load-file ".emacs.d/init.el")

嗯,我明白了,您说的对,我init.el是有问题,我检查出来了 但是现在又报错

error: Non-hex digit used for Unicode escape

我没有设置过编码,为什么会有这个问题呢,网上找的帖子没有看懂。。。一大堆命令符,或许是我英文太差了。

还有,您说得是从命令行启动是什么意思呢,我用的是windows系统,您说的是从cmd启动吗,我试了一下发现提示我不是命令

第一次出问题,没有经验,还望谅解

我明白从命令行启动是什么意思了

我使用命令出现了如下东西

Debugger entered--Lisp error: (error "Non-hex digit used for Unicode escape")
  read(#<buffer  *load*-870944>)
  eval-buffer(#<buffer  *load*-870944> nil "c:/Users/Administrator/AppData/Roaming/.emacs.d/init.el" nil t)  ; Reading at buffer position 331
  load-with-code-conversion("c:/Users/Administrator/AppData/Roaming/.emacs.d/init.el" "c:/Users/Administrator/AppData/Roaming/.emacs.d/init.el" nil nil)
  load("C:/Users/Administrator/AppData/Roaming/.emacs.d/init.el" nil nil t)
  load-file("C:/Users/Administrator/AppData/Roaming/.emacs.d/init.el")
  eval-buffer(#<buffer  *load*> nil "c:/Users/Administrator/AppData/Roaming/.emacs" nil t)  ; Reading at buffer position 890
  load-with-code-conversion("c:/Users/Administrator/AppData/Roaming/.emacs" "c:/Users/Administrator/AppData/Roaming/.emacs" t t)
  load("~/.emacs" t t)
  #[0 "^H\205\266^@     \306=\203^Q^@\307^H\310Q\202?^@ \311=\204^^^@\307^H\312Q\202?^@\313\307\314\315#\203*^@\316\202?^@\313\307\314\317#\203>^@\320\321\322!D\nB^R\3$
  command-line()
  normal-top-level()

是什么意思呢,为什么全是路径,还有Reading at buffer position是什么意思呢

貌似是被转义了,第一次出现问题,没有想到错误有可能在init.el中 那个问题现已解决,谢谢

也看不明白,或许跟编码有关系?

路径是 loadload-file 函数的参数,也有很多 t, nil,它们也是参数。

估计是出问题的位置 (point),猜测你在 .emacs 的第 890 个字符处用了 (load-file "..../init.el"),在 init.el 的第 331 位置用了一个 Emacs 看不明白的字符。使用 M-: (goto-char 890) 可移动到 890 处。

嗯,我明白了,返回的是890 (#o1572, #x37a)然后debug中定位的是有背景色的’0‘上 \306=\203^Q^@\307^H\310Q\202?^@ \311=\204^^^@\307^H\312Q\202?^@\313\307\314\315#\203*^@\316\202$

然后我又输入M-:(goto-char 331),它返回331 (#o513, #x14b),并定位在了有背景色的’i’上 load-with-code-conversion(“c:/Users/Administrator/AppData/Roaming/.emacs.d/init.el” "c:/Users/Administrator/AppData/R$ 这是什么意思呢

题外话,这里不支持html吗,表示我使用没有效果

支持 markdown 和 HTML 的

配置出问题的情况估计每个 Emacs 用户都遇到过,为此向别人寻求帮助效果不好,因为别人又看不到你的配置,就算你贴了出来,它很可能比较长,别人也不情愿去看、乃至运行。

你应该尽可能自己把出错的地方找出来,然后尝试解决,如果要想别人提问,自己先把问题搞明白,目的是让别人能明白、重现你的问题。

支持一部分,具体不了解,可以自己试试或在网上搜索 “Discourse HTML”,看看有没有说明。


<h1>h1</h1>
<s>一比二大</s>

h1

一比二大