【问题标题】:Newly created Emacs init file won't load新创建的 Emacs 初始化文件不会加载
【发布时间】:2016-10-31 06:18:20
【问题描述】:

在 Win7 上安装的全新 Emacs 24.5 64 位似乎不包含 init.el 文件,我需要一个用于设置我想使用的插件的文件,因此我在 Emacs 中的 C:\ 创建了一个用户\brinklec\AppData\Roaming.emacs.d。重启 Emacs,得到了明显的名气

Warning (initialization): An error occurred while loading `c:/Users/brinklec/AppData/Roaming/.emacs.d/init.el':

File error: Cannot open load file, no such file or directory, use-package

我最初并没有理解错误末尾对“use-package”的引用,并且前面的措辞显然误导了我认为 Emacs 说它无法加载的是 init.el。

手动加载也会出现同样的错误。但是,Emacs 可以打开并成功地重新保存文件。

我看到了一堆类似的问题,但似乎都涉及在已经存在并成功加载的 init.el 中引用的其他文件。我以为我的问题不同了,但现在可能不是?

我的 init.el 的内容来自recommended config for ENSIME plug-in(除了下面的第一行注释之外逐字记录):

;;; ~/.emacs.d/init.el
;; global variables
(setq
 inhibit-startup-screen t
 create-lockfiles nil
 make-backup-files nil
 column-number-mode t
 scroll-error-top-bottom t
 show-paren-delay 0.5
 use-package-always-ensure t
 sentence-end-double-space nil)

;; buffer local variables
(setq-default
 indent-tabs-mode nil
 tab-width 4
 c-basic-offset 4)

;; modes
(electric-indent-mode 0)

;; global keybindings
(global-unset-key (kbd "C-z"))

;; the package manager
(require 'package)
(setq
 use-package-always-ensure t
 package-archives '(("gnu" . "http://elpa.gnu.org/packages/")
                    ("org" . "http://orgmode.org/elpa/")
                    ("melpa" . "http://melpa.org/packages/")))

(package-initialize)
(when (not package-archive-contents)
  (package-refresh-contents)
  (package-install 'use-package))
(require 'use-package)

来自 --debug-init 的调试输出:

Debugger entered--Lisp error: (file-error "Cannot open load file" "no such file or directory" "use-package")
  require(use-package)
  eval-buffer(#<buffer  *load*> nil "c:/Users/brinklec/AppData/Roaming/.emacs.d/init.el" nil t)  ; Reading at buffer position 841
  load-with-code-conversion("c:/Users/brinklec/AppData/Roaming/.emacs.d/init.el" "c:/Users/brinklec/AppData/Roaming/.emacs.d/init.el" t t)
  load("c:/Users/brinklec/AppData/Roaming/.emacs.d/init" t t)
  #[0 "\205\262

【问题讨论】:

  • Emacs 不需要 初始化文件(也不会代表您创建一个);但如果你给它一个,你想确保它是有效的。显然你给了它一个依赖于第三方 use-package 库的库,但实际上并没有安装它。
  • 我添加了上面 init.el 的内容,我从 ensime.org 对 ENSIME 插件的推荐中复制了这些内容。最后一行说(需要'use-package)。在文件的前面部分,似乎有一些用于 use-package 的参数。我不知道这里的疏散命令适用什么规则...
  • 使用开关(命令行选项)--debug-init 启动 Emacs。
  • 添加在上面。不明白它在说什么(需要'use-package)。假设应该存在的文件中缺少某些内容。当我之前运行它时,由于错误消息的措辞,我仍然认为它在抱怨 init.el 本身,而不是在尝试安装 use-package。我再次为初学者的无知道歉。

标签: emacs initialization


【解决方案1】:

在 final (require 'use-package) 之前添加以下表达式似乎已经解决了错误(尽管我在启动时也不再看到有用的问候屏幕):

(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))

【讨论】:

  • 那是因为你设置了inhibit-startup-screen t。如果您想获得启动屏幕,请从您的配置中删除该行。
猜你喜欢
  • 2011-12-28
  • 2015-03-08
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多