我刚刚在MacOS上将GNU Emacs从23升级到24,并且一些ELPA安装的软件包停止工作。其中之一是AucTeX。删除它并通过包管理器重新安装它使它再次工作,但我不想手动为每个包执行此操作。我有点困惑,我在互联网上找不到任何相关信息。
对于新版本的Emacs,是否需要重新编译.elc?为什么这不是package.el的功能?
答案 0 :(得分:86)
您无需重新安装所有软件包。包本身可能很好,但是,它们需要重新编译,因为Emacs Lisp字节代码通常在主要版本之间不兼容。
要重新编译所有包,请键入M-: (byte-recompile-directory package-user-dir nil 'force)
。重新启动Emacs后,软件包应该可以正常工作。
答案 1 :(得分:3)
变量package-activated-list
包含我们感兴趣的软件包列表。所以我们只需要再次安装每个软件包。我们不需要明确删除它们;致电package-install
会打消旧版本。
将此代码放在暂存缓冲区中并对其进行评估(即将光标放在最后,然后按C-x C-e
):
(dolist (package-name package-activated-list)
(package-install package-name))
答案 2 :(得分:3)
这适用于Emacs 25.1和26:
(defun package-reinstall-all-activated-packages ()
"Refresh and reinstall all activated packages."
(interactive)
(package-refresh-contents)
(dolist (package-name package-activated-list)
(when (package-installed-p package-name)
(unless (ignore-errors ;some packages may fail to install
(package-reinstall package-name))
(warn "Package %s failed to reinstall" package-name)))))
答案 3 :(得分:1)
emacs 25之后的食谱:
(custom-set-variables '(package-selected-packages (quote (browse-kill-ring helm undo-tree use-package)))
$ rm -rf ~/.emacs.d/elpa/*
(progn (package-refresh-contents) (package-install-selected-packages) (byte-recompile-directory package-user-dir nil 'force))