旧的包放在一块,都在列表尾部,~
标记删除,然后x
就行了。
还是说。。有什么神奇的需求?
旧的包放在一块,都在列表尾部,~
标记删除,然后x
就行了。
还是说。。有什么神奇的需求?
要同时删除旧的和新的,或者至少要删除新的,因为问题的前提是新的包解压出来有问题,而不是更新以后怎么删除旧包。
这不是我说的重点啊。重复的包名已经列出来了,怎么操作方法就随意了。你也可以选中区域,执行 shell 命令之类的。package.el
已经有这部分的功能了,只依赖于 Emacs,可移植性也好啊。
没想到我的贴居然把大神给炸出来了 。确实不知道 package.el
还有这样的用法,多谢提醒。package.el
虽然好,但是国内的网络环境下,我每次 list-packages
都得等至少半分钟,所以我只在必须的时候才 list-packages
,上面勾选答案的 shell 命令也算是一种折衷的办法。
选择几个不连续的行有什么方便快的办法吗。
用脚本还可以做定时任务,不用每次都打开 list-package 删。
我也从来没注意到 list-packages
会列出重复的包。
list-packages
确实很慢,即便加上 no-fetch
依然很慢。因为它做了太多工作,查找重复只是其中很小的一部分,并且最后输出结果未必是你想要的形式。
如果只想找出重复的包,自己迭代 package-alist
或许是更好的选择:
(car package-alist)
;; =>
;; (youdao-dictionary
;; #s(package-desc
;; youdao-dictionary
;; (20170226 49)
;; "Youdao Dictionary interface for Emacs"
;; ((popup (0 5 0))
;; (pos-tip (0 4 6))
;; (chinese-word-at-point (0 2))
;; (names (0 5))
;; (emacs (24))) nil nil "~/.emacs.d/elpa-26.0.50/youdao-dictionary-20170226.49" ((:keywords "convenience" "chinese" "dictionary")
;; (:url . "https://github.com/xuchunyang/youdao-dictionary.el")
;; (:commit . "44548f56a1c736e6a7fae4546657bff0a94bf3cb")) nil))
Update:
我不确定 package-alist
是否包含所有必要的信息,更多可以参考 package-menu--refresh
函数,里边还用到其它跟包相关的 list。
前面(查找 emacs package)的方法不完善,只能打印出一项重复(过时)的条目:
#+BEGIN_SRC sh
# packages=$(/bin/ls ~/.emacs.d/elpa-26.0.50)
packages="s-20171102.225
s-20171102.226
s-20171102.227"
echo "$packages" | \
sort | \
gsed -E 's/^(.*)(-20[0-9]*\.[0-9]*)$/\2,\1/' | \
column -t -s ',' | \
uniq -d -f 1 | \
awk '{print $2$1}'
#+END_SRC
#+RESULTS:
: s-20171102.225
改进后的脚本:
#+BEGIN_SRC bash :results output
# packages=$(/bin/ls ~/.emacs.d/elpa-26.0.50)
packages="s-20171102.225
s-20171102.226
s-20171102.227"
join -v 1 <(printf "$packages" | sort) <(printf "$packages" | \
sort -r | \
gsed -E 's/^(.*)(-20[0-9]*\.[0-9]*)$/\2,\1/' | \
column -t -s ',' | \
uniq -d -f 1 | \
awk '{print $2$1}' | sort)
#+END_SRC
#+RESULTS:
: s-20171102.225
: s-20171102.226
装package-utils, 执行package-utils-upgrade-all, 会自动删除所有旧版本