Emacs:符号的函数定义为空:use-package

35

我正在尝试在Windows上配置Emacs,其中有一个名为"use-package"的包,我想在我的配置中插入它,但是当我按下Emacs执行时,会显示消息"Symbol's function definition is void: use-package"

(setq inhibit-startup-message t)

(require 'package)
(setq package-enable-at-startup nil)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
(add-to-list 'package-archives '("gnu" . "https://elpa.gnu.org/packages/"))

(package-initialize)


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

有时我会收到错误信息“use-package不可用”。
    Debugger entered--Lisp error: (void-function package-installed-p)
    (package-installed-p (quote use-package))
    (if (package-installed-p (quote use-package)) nil (package-refresh-contents) (package-install (quote use-package)))
    eval((if (package-installed-p (quote use-package)) nil (package-refresh-contents) (package-install (quote use-package))) nil)
    elisp--eval-last-sexp(nil)
    eval-last-sexp(nil)
    funcall-interactively(eval-last-sexp nil)
    call-interactively(eval-last-sexp nil nil)
    command-execute(eval-last-sexp)

我认为你展示的代码不可能引起这个问题。你能否获取一个回溯来查看哪段代码路径确切地触发了这个消息?(如果没有其他问题,最后的闭合括号也缺失了,所以这个精确的代码甚至无法解析。) - tripleee
我忘记在问题上添加最后一个括号了。 - glashunti
1个回答

34
你应该能够在使用 M-x package-list-packages 命令生成的列表中找到 use-package。如果是这种情况,那么运行 (package-install 'use-package) 应该会成功:该软件包可在 MELPA 上获取。
要使用它,您必须添加:
(require 'use-package)

添加到你的.emacs文件(或等效文件)中。


1
感谢您的帮助。我相信是因为MELPA地址上的“https”被更改为“http”,导致Emacs无法安装MELPA包。 - glashunti
2
说句题外话,在Aquamacs(Mac OS Emacs)中,该命令是M-x package-list-packages,其他变体可能也是如此。 - Cris P
1
如果不是这种情况(缺少use-package),那怎么办? - MichaelChirico
1
你需要将 MELPA 仓库添加到 package-archives 中:(add-list package-archives '("melpa" . "http://melpa.org/packages/"))` - 重启 Emacs 后,你应该能够在列表中找到它。 - NickD
1
你应该在一个单独的问题中询问这个,而不是在一个评论中。当你提出问题时,加上backtrace,你会在执行M-x toggle-debug-on-error和再次执行M-x package-list-packages后得到它。 - NickD
显示剩余2条评论

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