在emacs中使用不同的包存储库

在emacs中使用不同的包存储库,emacs,package,Emacs,Package,我有一个.emacs文件,在该文件中,我使用软件包安装在初始化时从存储库自动安装所需的软件包。到目前为止,我使用的是http://melpa.milkbox.net/packages/repository,这是我从在线教程中获得的。在某个时候,我试图安装auctex软件包,但收到一条错误消息,告诉我该软件包在该存储库下不可用。我查过了,这是真的。我在GNU存储库下找到了auctex包:http://elpa.gnu.org/packages/ 我试图做的是:将第二个包存储库(本例中为GNU EL

我有一个
.emacs
文件,在该文件中,我使用
软件包安装
在初始化时从存储库自动安装所需的软件包。到目前为止,我使用的是
http://melpa.milkbox.net/packages/
repository,这是我从在线教程中获得的。在某个时候,我试图安装
auctex
软件包,但收到一条错误消息,告诉我该软件包在该存储库下不可用。我查过了,这是真的。我在GNU存储库下找到了
auctex
包:
http://elpa.gnu.org/packages/

我试图做的是:将第二个包存储库(本例中为GNU ELPA)添加到我的
.emacs
文件中,
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))
并且,
auctex
包仍然正确加载。

您的

(add-to-list 'package-archives
             '(("melpa" . "http://melpa.milkbox.net/packages/")
               ("gnu" . "http://elpa.gnu.org/packages/")) t)
不向列表中添加两个条目:
addtolist
只向列表中添加一个元素。在这种情况下,它将添加元素
(“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/"))
但是请注意,第二个
添加到列表
应该是多余的,因为
包归档文件默认包含
(“gnu”)http://elpa.gnu.org/packages/“
已经存在


还有一件事:你不应该在安装这些软件包后要求它们(就像你在代码的最后一行所做的那样),因为这些软件包应该有足够的自动加载功能,使这些
需要
的软件包不再需要(而且有害的是它会减慢你的启动速度).

你想用这个做什么:
(dolist(package'(使用package))…)
?迭代列表,其唯一元素是symbol
use package
——仅迭代一次,将变量
package
绑定到symbol
use package
(add-to-list 'package-archives
             '("melpa" . "http://melpa.milkbox.net/packages/"))
(add-to-list 'package-archives
             '("gnu" . "http://elpa.gnu.org/packages/"))