你最近移除了哪些插件和功能

删除了 fcitx

我发现 Emacs 很容易卡顿,常常出现快速输入英文单词时字母乱序, list-timers 中显示 fcitx 有一个运行得非常频繁的定时器。删除 fcitx 包后 Emacs 重新变得非常流畅。

另外也发现我并不需要 fcitx 包来自动切换为英文,写代码基本上都是用英文,右 Shift 进行中英文切换已经是很方便的了。

1 个赞

移除了 which-key 和包管理器 borg

1 个赞

Borg 我用了3年了,很好用。 你换成什么包管理器?

我现在用 git submodule 手动管理了

佩服啊。我还是离不开通过 Borg 安装包后自动给byte-compile, 并且包是 autoload的, 同时还编译好了包的文档。

纯 git submodule 话,都要手动处理,感觉有点麻烦啊。

纯手工 git submodule 并不麻烦, 开始加一次 git url 就好了。

以后想升级的时候, 切换到插件目录 git pull 就好了, 而且最新版有问题, 可以执行 git reset 随时切换会稳定的版本。

git submodule 是生产力稳定使用最好的方式。

最大的好处就是, 再也不用焦虑升级后会不会挂的问题。

确实是的。Borg 也是用 git submodule 来实现的。

我上面说的麻烦是指处理 byte-compile,autoload,文档的编译等等。 或者就是要放弃这些。

byte-compile 我觉得完全没必要, 因为Emacs的性能瓶颈不在这里。

手动写 autoload 太废事情了, 用 lazy-load 类似的技术做最简单, 自定义按键的时候顺便 autoload 就自动做了。

文档的编译, 没看懂是啥, 一般直接看elisp插件源代码最快。

就是有的包会提供 .texi 格式的文档,编译后,可以通过 C-h i 查看包的文档,和内置的包一样。比如,magit 就提供了 magit.texi

确实我很多时候也是直接去看源码,源码中的函数也有文档。

:+1: 这也是一个不错的方法

你一旦用习惯了 git submodule , 就发现Emacs各种包管理的功能都没有git做的好。

1 个赞

byte compile 可以有效减少执行函数时的 GC 次数,代码写得好的提升还是明显的,如果过度使用函数来抽象的话就是如编了

autoload 也是可以自动生成的。

不过我个人用的方法是把所有需要手动安装的 el 文件装到一个路径下,生成一个 autoload 文件,然后配置只要加载这一个文件就够了,减少 load-path 相当给加载文件加速了。Emacs 内置的包也是用这样的方法加载的。

编译 texi 需要的是 GNU texinfo,变成 info 文件后安装,然后添加 info path 到 emacs 就行了

手写 makefile 足够用来管理这些了

大幅度提高性能目前最靠谱的就是像 lsp-bridge 这样把大量对象的计算放到外部进程, 并利用外部进程的多线程做并发计算。

这样做, Emacs从根本上就不会产生大量计算过程中的对象,也就没有了GC操作, 所以我现在都不期待 byte compile 那点毛毛雨的提升。

同时Emacs除了GC, 影响用户体验的主要是多线程,只有大量计算的时候不要GC并提供多线程支持才是性能提升的关键。

综上所述, Emacs的性能提升在于对关键高性能插件的重点优化, 比如 LSP补全, 大规模模糊搜索,大量Overlay渲染, 多媒体计算等关键地方用外部进程优化后, 就不会卡。

2 个赞

我是用 git submodule 进行包管理的。以前为了实现 borg 提供的 autoload, byte compile 等功能,抄过它的源码,其实也不是很复杂……

关于 compile,我的做法是给部分包做 byte-compile,因为 byte-compile 还有个副作用是 natively-compile,后者的性能提升会更明显一些。org-mode, magit 这些包里的函数众多,本身对 byte/natively compile 的支持也比较好,我会选择编译一下,毕竟它们也提供了一键编译的 Makefile 文件。大多数包其实就没用到 compile,也是为了方便我随时去 submodule 里面改源码看看效果(不然还要删除 .elc 文件)。

关于 autoload,我也几乎很少用,因为 use-package 提供的 autoload 就够用了,一般我也不需要 autoload 某个包的所有函数。例如,对于 org-mode 你可能只需要 autoload 一个 org-mode 然后配置好 auto-mode-alist,访问 .org 文件时就会自动 (require 'org),其他函数自然加载好了。不过如果有个包里确实有很多函数需要 autoload,或者有一些带 autoload cookie 的普通语句(一般是各种 major mode 中对 auto-mode-alist 的修改),我还是会选择 loaddefs-generate

关于 .texi 文档,一般有提供的话,都会有 Makefile 一键编译为 .info,修改一下 Info-default-directory-list 即可。

1 个赞

改完 C-c C-f 就順手编译了