最近在使用 use-package 组织自己的配置,但是使用过程中有一些疑问,请教一下大家:
1、文档中说 :init 是在 load package 之前加载的配置, :config 是在 load package 之后加载的配置,可是我在使用过程中并没有发现这两个选项明显的用法区别,比如有一些 hook 或者 enable mode 操作,甚至是变量赋值都是放到 :init 里, 难道 package 里的 mode 或变量在 load 对应 package 之前就可以进行操作吗?
2、use-package 的用法基本上是一个 package 加一条配置,那么 use-pacakge 对于没有特殊配置 packages 能否用类似 devar packagelist 的方法统一加载?
3、对于个人的次级配置文件,例如 init-org.el ,使用 use-package 导入比直接使用 require 导入是否具有优势?
KiteAB
2020 年10 月 14 日 09:18
3
1:有些插件要求在插件加载之前进行配置 因为插件实现方法不一
2:可以 自己写个宏?
3:没有
LdBeth
2020 年10 月 14 日 11:54
4
你开了 autoload (:defer t
)就会有区別。
直接 (mapcar #'load ...
就行了
简单来说,没有
找到了作者的回答,我理解在严格意义上 :init 的代码应该是在 package 还未加载情况下运行的,而有些 package 在 use-package 之前可能已经加载了,所以有的配置里 :init 用到了 package 中的内容也不会报错,但是这样实际是和 :config 是混淆的。
XYZ_C
2020 年10 月 14 日 19:54
6
我也想请教一下,什么情况下才需要用 :preface
?感谢
根据文档的解释:
Code to be run before everything except ‘:disabled’; this can be used to define functions for use in ‘:if’, or that should be seen by the byte-compiler.
:preface
的代码应该是在最开始执行的(比:init
还早,:if
判断也在其后),并且可以进行byte-compile
,不过莫非有些 lisp 语句不会进行byte-compile
吗?
1 个赞
LdBeth
2020 年10 月 15 日 03:15
8
靠 eval
执行的自然不会被 byte compile
请教一下,是不是eval
执行就是直接在 emacs 内部的编译环境里执行,不会生成 elc 文件,而byte-compile
会生成 elc 文件?
LdBeth
2020 年10 月 15 日 09:34
10
byte compile 只会把结果保存在内存里以能够执行,生成 elc 文件以免再次启动仪式emacs 后需要重新编译是可选的
那么byte-compile
和eval
有何区别,执行时在内存中的形式不一样吗?
LdBeth
2020 年10 月 16 日 01:02
12
Emacs 的 eval
可以解釋执行一个 list,也可以直接执行 byte code。显然 byte code 和用 list 表示的程序形式是不一样的