GNU Emacs 裁剪指南

因为多少会有人因为心理因素希望删用不上的包,又不见得了解怎么上手做,所以开这个主题。

本文只能作为理论指导,因为本文删除文件导致的任何问题概不负责 从 melpa 下载的第三方包,可能用到任何 Emacs 自帯的功能,确认是否用到相应的动能是读者的责任。

Emacs should start and be useable even if the whole lisp directory is empty (note that we rarely/never test it, so I don’t guarantee that it’ll work, but at least in principle it should and if it doesn’t you should report it with M-x report-emacs-bug). So feel free to remove any and all packages in there you don’t find useful, in order to create a trimmed-down version of Emacs.

–Stefan at 2012 elpa - Delete built-in packages in Emacs - Stack Overflow

Stefan 的回答已经确立了深度定制的可行性,当然这需要对 Emacs 的深入理解。

因此原则是不会涉及粒度太细的定制,并指出一些不太常用的包。如果是在这里指出可以删的包,说明在编译 Emacs 之前就删除也不应影响编译。可以自已写个脚本 rm 掉。

这是一个公共 Wiki,如果 Emacs 后续有改动,或是有错灟,可以直接改。

首先在写 lisp/ 下什么可以删之前,其下有一些子路径,先说其中哪些不方便动:

  • org/ 虽然可能大部分人不会想删,但就算用不上也不应该删,不然除非做更细的更改,emacs 就构建不起来了
  • calc/ 因为 org 会用到,所以也不能动。
  • calendar/ 不应动,因为 org 和其它包都用它计算日期
  • url/, net/ 删了就连 elpa 都不能用了
  • mail/ 删了那 report-emacs-bug 就不行了,不过要是连这个都不需要,加上没有邮件需求,那也不是不能删
  • emacs-lisp/ 不用提了,删了大概 99.9% 的包用不了
  • international/ 别问为什么,听我的,不方便删
  • cedet/ 实际上有 prog mode 会用到
  • obsolete/ 听上去可以无脑删,其实都是最近几个版本才刚动的功能,如果有用一些不太新的第三方包那这些都是有用的,千万别动

可以删的:

  • gnus/, erc/, mh-e/, emulation/ 不用可以删了
  • play/ 不想玩游戏就可以删了
  • leim/ 可以删内容,路径要保留
  • nxml/ 不写 XML 可以删。

但本站有人用的:

  • calendar/todo-mode.el @LdBeth 在用

不常用的 progmode

  • mixal-mode 原版 TAOCP 用的假想汇编语言
  • simula, modula2-mode 常说的影响了 C++ 的两个编程语言
  • antlr-mode.el 自带版本太老了,AntlrVSIX - 好用(?)的ANTLR语言服务器
  • cfengine.el 是一个 expert system 语言
  • dcl-mode.el OpenVMS Digital Command Language
  • ebnf-*.el+ebnf2ps.el org mode 依赖,不建议动
  • erts-mode.el
  • f90.el 用 Fortran 不算少见,用新版的是真不多
  • icon.el
  • idlwave.el+idlw-*.el 已经移动到 elpa
  • tcl.el
  • vera-mode.el

但是本站有人用的

  • m4-mode.el GNU autoconf 用的宏语言,也可以用来做别的语言的预处理,@LdBeth 用来写 CTAN: Package Circuit_macros
  • meta-mode.el MetaFont/MetaPost @LdBeth 经常用
  • prolog-mode @chansey97
  • verilog-mode.el, vhdl-mode.el 本站有不少需要写 HDL 的

其余请自行补充

不常用的 textmode

请自行补充

  • artist.el
  • dns-mode.el
  • emacs-authors-mode.el 编辑NEWS文件
  • emacs-news-mode.el 编辑etc/AUTHORS文件
  • enriched.el 邮件相关的包比如 Gnus 会依赖它,不建议删
  • po.el GNU gettext 翻译文本用的格式
  • remember.el

但本站有人用的

  • nroff-mode @LdBeth 同时还是一名 Troff 用户,用 heirloom troff,当然 manpage 也是 nroff 格式的一种

  • rst-mode.el 编辑reStructuredText文件, @XLBilly 在用。

其它不常用的 .el

  • md4.el 是个实际应用面不多的被发现安全问题的摘要算法,现在常用的是 md5
  • mpc.el — A client for the Music Player Daemon
  • talk.el 类似同名 Unix command,在个人电脑上没有用的上的地方
  • doc-view.el 虽然不如 pdf tools 体验好,论坛里大把 Linux 用户在用,非 Linux 用户可以考虑。

请自行补充

16 个赞

镜像话题

辅助话题

加条规则,如果有人发现自己在用一个“不常用的功能”,可以认领移动到“但是本站有人用”

这个主题开的太硬核了 1025

PS:瞅了眼Emacs的体积,看看了硬盘容量这才哪到哪,就让我慢慢探索上古老功能吧~

(话说,最近我对原生 *Completion* buffer 补全突然特别上头,别说corfu/company之流,连ivy/vertico托管都不想要了,我发现人时不时会有返古冲动。。。过阵子就过去了 :smiley:

我是因为看到了这个博客,传送门:The *Completions* Buffer Gets a Big Upgrade in Emacs 29 · robbmann

3 个赞

这个不一定,有两个包似乎是可以删的:

  • todo-mode.el
  • timeclock.el

这两个不用是可以删,不过我用 todo mode

我在macOS中不用leim、mh-e、gnus,已经删除。不过建议是在编译后删除生成的app目录下的文件,不要删源代码。

  • leim在lisp目录中最大,占了20M以上,不用的可以删。

  • prog-mode/eglot* 也可以删

  • loadup.el中不用的语言如(load "language/cyrillic")可以注释掉。

    (load "leim/leim-list.el" t) 也可以注释掉。

2025年,感觉普通家用设备应该用不到这类删减定制

1 个赞

定时清一下 .cache, Downloads 我也感觉 比节省的这几M或几十M空间多,以我来看 确实没太大必要.

这些 默认没有在 初始化流程中或主动或被动加载的el 文件,在那放着影响没那么大. 这些大都是文本文件,甚至 还是经过gz 加缩的。

emacs 自身也会定期将某些包移动动 obsolete 这个目录,只是emacs 发版流程长,废弃 的流程显得长了些。

话说回来,前段时间我还在 artist-mode 的辅助下画过一个简单的订单状态流转,

3 个赞

这个内置的 todo-mode 用起来感觉如何,能够简单介绍一下主要的功能。

todo-mode 我也用哈哈哈

功能很容易上手:

  1. M-x todo-show
  2. 然后按一下 i ;; todo-insert-item
  3. 按 d 是Done ;; todo-item-done

其他的稍微看一下help就差不多了

4 个赞

我一直没搞懂company的逻辑,配置都是抄来的,你这个后面要是有什么心得体会,多多分享啊!

试了一下,很清爽

我自己感觉没必要裁剪,大把空间,再说用不上的应该不会加载吧,来看看各种功能,开开眼界

我也试了下,但在 mac 上(29.4),在 todo-mode 里面按 d 就卡死,cpu 100% 。好像有 bug。

简单来说,就是设置一些任务,然后就能在自带的日历上显示

不久以前有人遇到过类似问题,结果发现他自己魔改了自带日历的格式,导致 todo mode 自动编辑时认不出正确的格式卡死

  • 是用 M-x todo-show 打开 todo view
  • -q 排查。

配置中有这个设置就卡死:

(setopt calendar-date-style 'iso)

没错,就是同一个 bug,已经在 30 修好了 Add support in todo-mode.el for ISO date format · emacs-mirror/emacs@0bfe764 · GitHub