大家都是怎么调整Emacs启动时间的???

自个儿想重新搞一下配置,启动时间太慢了,个人强迫症!!

想问下你们的配置都是怎么解决启动时间??

我看到Emacs想减少启动时间视乎只有 减少加载包 这方法,用过这里的大师做的 lazy-load 加载包,感觉不太理想,lazy-load 如果去加载一个很复杂的包就难了,类似 helm 这种
目前个人有 30个包左右,Windows 启动时间 5s左右,Linux 启动时间为 3s 左右 太难受了,想做到秒启动

或者,你们管理包的方式,按键映射用的什么包?

1 个赞

减少不常用的包最有用,其次是 autoload/lazyload 。

1 个赞

升级电脑硬件配置

3 个赞

:wink:

这个没用,包一多一样启动时间长

你可以用 Snails 替代 Helm, Snails就一个包覆盖大多数使用场景, Helm功能太多了,相应的依赖也很多。

1 个赞

哎,你们有没有打算弄一个简单的配置??
比如 不安装任何包,单纯 的 尽量减少启动时间的配置,不加任何第三方包??

用 use-package 可以很方便设置懒加载。我100个包可以控制在1s 左右的启动时间。

1 个赞

懒加载是 use-package 的 defer 吗??
我现在就是使用 use-package 的 defer ,我感觉是有问题的,不知道是不是每个包的启动时间不一样还是怎么回事,之前做好的会出错,或者少了一些依赖

如果熟悉 elisp 的话,多使用 autoload 和 with-eval-after-load 去优化;如果不那么熟悉,可以使用一些配置管理的包,比如 use-package 或者 leaf.el ,它们的封装使用要方便一点。

可以看看我之前的回复,先确定本机上面最快的启动时间:

也可以学习一下其他人分享的经验:

https://emacs-china.org/search?q=emacs%20%E5%90%AF%E5%8A%A8%E6%97%B6%E9%97%B4

2 个赞

我是用 package.el 管理包的

我用 use-package,必要时加上 :defer t。 我还设置了

(setq package-quickstart t)

这样会快一点,原理是把 autoload 都写到一个文件。就是 M-x list-package 要刷新一下。

1 个赞

现在 defer 支持 num 了,可以实现启动后多少秒加载
如果选项 t 的话,每个包谁先加载?

我现在就很头大,下载了好几个配置,都学不进去,遇到点问题还是打开 Vim/VSCode/Cot 解决。

不过 SystemCrafter 有个基础配置我勉强能看进去。而且目的就是为了方便别人 fork 和修改而攒的。

SystemCrafters/rational-emacs

我 -Q 是0.1秒 :sweat_smile:

没有 defer 的包

我说的是 use-package 的 :defer

抱歉,不太理解你的意思

找个工具如benchmark-init之类的,看看哪个package启动时间最慢,又可以defer的,先defer试试,再优化其他的。

另外,优化启动时间这东西,到一定程度就可以,没有止境,折腾多了浪费时间。

2 个赞

那说明你优化的空间很大,不过我个人建议是你先找一个 满足自己需求且经过优化的的配置,先用起来,优化需要一定的学习和时间积累。

我最找是从群里的配置中筛选了一下,满足自己的需求,先用再改。

看你想要的是多快。如果你的目标是 1s 以下的话,那么懒加载就可以,具体的看下这个函数的文档 autoload.

如果你需要更快,那你只能用 pdump 的方式了(而且这样的话你用不了 native-comp)。

  1. defer x秒

如下面的 defer 2,是启动后idle 2秒就加载:

;; 我用来配合ivy支持拼音首字母查询的,不知道该如何lazy load,只能延迟几秒加载了,其实一般都不用。
  (use-package pinyinlib
    :defer 2
    :load-path "~/.emacs.d/site-lisp/extensions/pinyinlib")

;; evil必须在emacs启动后就能用,无法按键触发,defer 1秒差不多了,启动速度在0.7s左右。
(use-package evil
  :ensure t
  :defer 1

  1. defer t

defer t的就只能靠hook或者某个快捷键来加载了。

(use-package diredfl
  :defer t
  :hook (dired-mode . diredfl-mode)

(use-package sdcv
  :defer t
  :load-path "~/.emacs.d/site-lisp/extensions/sdcv"
  :bind (("s-t p" . sdcv-search-pointer)  ;; 光标处的单词, buffer显示
         ("s-t t" . sdcv-search-pointer+) ;; 光标处的单词, frame显示
  1. 启动加载

用于启动时必须加载的package,如doom-theme,如果不加载启动时就没法立刻用主题的配色显示,不好看,会是一个默认theme的大白屏,然后再一闪加载theme的深色主题。

(use-package doom-themes

(use-package doom-modeline
  :hook (after-init . doom-modeline-mode)

2 个赞