我有一个.emacs
文件,我在其中使用package-install
在初始化时从存储库自动安装所需的包。到目前为止,我使用的是http://melpa.milkbox.net/packages/
存储库,这是我从在线教程中获得的。在某些时候,我尝试安装auctex
包,并收到一条错误消息,告诉我该包在该存储库下不可用。我检查过,这是真的。我在GNU存储库下找到了auctex
包is available:http://elpa.gnu.org/packages/
。
我尝试做的是以下内容:在.emacs
文件中添加第二个软件包存储库(本例中为GNU ELPA),如果需要安装不可用的软件包,package-install
可以从中提供第一个存储库(MELPA)。
我不是Elisp中的专家(事实上,我是一个纯粹的初学者),我浏览了各种线程来寻找解决方案。这是我的实际代码:
(package-initialize)
(require 'package)
(add-to-list 'package-archives
'(("melpa" . "http://melpa.milkbox.net/packages/")
("gnu" . "http://elpa.gnu.org/packages/")) t)
(package-refresh-contents)
(dolist (package '(use-package))
(unless (package-installed-p package)
(package-install package)))
(use-package paredit :ensure t)
(dolist (package '(auctex ; <-- Not available under MELPA!
auto-complete
auto-complete-c-headers
magit
sr-speedbar
yasnippet
))
(unless (package-installed-p package)
(package-install package))
(require package))
在我的.emacs
文件中使用此代码,当我启动emacs时,我的配置将被忽略。我收到此错误消息:error: Required feature 'auctex' was not provided
。
如何修改我的代码以查看GNU ELPA的auctex
包?
为了您的信息,我使用Ubuntu 16.04和GNU Emacs 24.5.1。
编辑:只是为Stefan提出的内容添加几句话:我的代码出现了一些问题,并且我的add-to-list 'package-archives ...)
在两次调用中分离似乎不起作用(尽管它当然是正确的做法。这是由于我的(require package
)行试图在某个时候执行:(require auctex)
。请参阅this post,了解这是一个问题。
我读到了在安装软件包后不需要(require 'package-name)
的事实。 This post解释了原因。删除此行确保auctex
已正确加载,因为它已自动加载。
从那时起,一切正常,没有错误或警告。然后我试图删除我的行:
(add-to-list 'package-archives
'("gnu" . "http://elpa.gnu.org/packages/"))
和auctex
包仍然正确加载。
答案 0 :(得分:2)
您
(add-to-list 'package-archives
'(("melpa" . "http://melpa.milkbox.net/packages/")
("gnu" . "http://elpa.gnu.org/packages/")) t)
不会向列表中添加2个条目:add-to-list
仅向列表添加单个元素。在这种情况下,它将添加不是有效元素的元素(("melpa" . "http://melpa.milkbox.net/packages/") ("gnu" . "http://elpa.gnu.org/packages/"))
。
你想要
(add-to-list 'package-archives
'("melpa" . "http://melpa.milkbox.net/packages/"))
(add-to-list 'package-archives
'("gnu" . "http://elpa.gnu.org/packages/"))
但请注意,第二个add-to-list
应该是多余的,因为package-archives
默认情况下已包含("gnu" . "http://elpa.gnu.org/packages/")
。
还有一件事:安装后你不需要require
这些包(就像你在代码的最后一行那样),因为这些包应该有足够的自动加载来制作这样的包{{1}不需要(在某种意义上它会减慢你的启动速度)。