2017-12-27 338 views
1

我有一個.emacs文件,其中我使用package-install在初始化時自動從存儲庫安裝所需的包。到目前爲止,我正在使用http://melpa.milkbox.net/packages/存儲庫,我通過在線教程獲取了這個存儲庫。在某些時候,我試圖安裝auctex軟件包,並收到一條錯誤消息,告訴我該軟件包在該存儲庫下不可用。我檢查,這是真的。我發現了在GNU存儲庫下的auctexis availablehttp://elpa.gnu.org/packages/在emacs中使用不同的包存儲庫

我試圖做的是:添加第二個包庫(GNU ELPA在這種情況下)我.emacs從該文件是否需要安裝第一個庫(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。


編輯:我想補充幾句什麼斯特凡提出:有幾個問題,我的代碼,並分裂我的兩個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

你想用這個做什麼:'(dolist(package'(use-package))...)'?它遍歷列表的唯一元素是符號'use-package' - 僅一次迭代,綁定變量'package'爲符號'use-package'。 – Drew

回答

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這些軟件包安裝它們(像你做你的代碼的最後一行)之後,由於包應該有足夠的自動加載做出這樣require不必要的(以及有害感覺它會放慢你的啓動)。

相關問題