今天升级包的时候,emacs提醒我有170多个没用的包可以用package-autoremove
自动卸载,但是我发现那些包全是有用的……
这个·autoremove
到底以什么作为“可以卸载”或者说“没用”的标准?
(custom-set-variables package-selected-packages ;;这个变量 )
用户安装的包会放在 package-selected-packages
中,除此之外的包就属于“没用”的包。跟 apt-get autoremove
的意思类似。
这个变量的值是 Emacs 自动维护的,也就是说它的值会在你安装(如 package-install
)和卸载(如 package-delete
)时自动更新。这个变量的值使用 Custom File (custom-file
) 存储。
我自己也有更你同样的问题,我猜测是因为我把 custom-file
的设置放在了 init.el
的末尾。正确的做法是把它放到开头。因为 package-install
之前 custom-file
必须已经设置好了,否则 package-selected-packages
的值就不能存储下了。另外之后需要把所有的包重新安装一遍,或者自己调整 package-selected-packages
,注意不要忘记把它保存到 custom-file
里面,比如我用 use-package
的 :ensure
来安装包,我可以执行下面的 Advice,然后把 init.el
重新执行一遍就好了。
(define-advice use-package-ensure-elpa (:before (&rest r) fill-selected)
"Make sure :ensure fill `package-selected-packages'."
(add-to-list 'package-selected-packages (car r))
(customize-save-variable 'package-selected-packages package-selected-packages))
不清楚你的情况是否与我的相同?
刚刚发现还要放在 Package 初始化之后,不然用 Custom 设置的主题启动时不会应用
(setq package-archives
'(("gnu" . "http://elpa.emacs-china.org/gnu/")
("melpa" . "http://elpa.emacs-china.org/melpa/")))
(package-initialize)
(setq custom-file (locate-user-emacs-file "custom.el"))
(load custom-file :no-error)
;; 其它设定 ...
所以定义和load custom-file
都要放到开头?
对这个问题没什么印象了,而且现在看起来我前面的理由也不靠谱,虽然 package-install
会用到 custom-file
,但应该不管位置在哪里 (package--save-selected-packages
)
你自己关心的话,可以亲自试试。
也遇到了这个问题,可以用package--user-selected-p
替换package-installed-p
解决