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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在emacs中使用不同的包存储库相关的知识,希望对你有一定的参考价值。

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

我尝试做的是:在我的.emacs文件中添加第二个软件包存储库(本例中为GNU ELPA),如果需要安装第一个存储库(MELPA)下不可用的软件包,package-install可以从该文件中提供。

我不是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包仍然正确加载。

答案

您的

(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这些包(就像你在代码的最后一行那样),因为包应该有足够的自动加载来使这样的require不需要(并且在某种意义上它会有害放慢你的创业速度)。

以上是关于在emacs中使用不同的包存储库的主要内容,如果未能解决你的问题,请参考以下文章

Bazaar:如何将来自不同位置的文件放在一个存储库中?

如何使用Spring Boot从不同的包中自动装配存储库接口?

是否有某种“包搜索”功能可用于Emacs?

YASnippet - emacs 的代码片段管理工具

Emacs和ESS的使用技巧。

在 python 存储库名称和包名称中使用连字符/破折号