如何在 emacs (slime) 上使用 package-initialize 阻止包初始化

How to stop a package from initializing with package-initialize on emacs (slime)

一段时间以来,我一直在尝试让 slime+sbcl 在我的 emacs (26.3) 上运行。我首先通过 melpa 安装了 slime,但没有用。我终于让 slime 能够使用 quicklisp 和以下代码在干净的 emacs (emacs -q) 上工作:

(load "~/quicklisp/slime-helper.el")
(setq inferior-lisp-program "sbcl")

但是,当我将它放入我的实际初始化文件中并 运行 它时,它不起作用。我想如果我把 package-enable-at-startup 设为 nil 并注释掉 package-initialize,那粘液就起作用了。我的猜测是通过 melpa 安装的 slime 正在“覆盖”使用 slime-helper 的 slime 初始化。由于包依赖性,我无法通过 melpa 卸载 slime,我担心我可能会搞砸。但我还需要我所有的包来初始化除了粘液。所以我想知道是否有办法初始化我所有的包,但是抑制粘液包。

我认为最简单的方法是使用 package-load-list 禁用“elpa slime”的加载。使用 C-hv package-load-list Return 查看其文档。简而言之,您可以在 init 文件.

中放入类似的内容
(require 'package)
(setq gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3")
(add-to-list 'package-archives
             '("melpa" . "https://melpa.org/packages/")
             '("gnu" . "https://elpa.gnu.org/packages/"))
(setq package-load-list '((slime nil))) ;; don't load slime
(package-initialize)

(load (expand-file-name "~/quicklisp/slime-helper.el"))
(setq inferior-lisp-program "sbcl")

package-initialize 将跳过加载 slime(并操纵您的 load-path),让“quicklisp 粘液”首先出现在您的 load-path 上。这可能会也可能不会破坏包系统加载的依赖项。如果它们坏了,我会看看 quicklisp 是否可以管理它们并以这种方式处理它们,或者我会手动管理它们。