spacemacs的加载次序
spacemacs适用版本介于24.4和24.5之间,重点解决了以下几个问题
利用package包管理器,下载扩展非常方便,几乎不需要手工操作
用户不需要直接安装package,而是为特定场景创建layer,一个layer可以包含多个package,以及独立的键盘配置
layer默认autoload延迟加载扩展,所以spacemacs默认100多个扩展启动不过数秒
基于evil,同时提供vi按键,强大的Leader键
基于helm,projectile,undo-tree等等一系列强大扩展,spacemacs真正做到了简单强大
由于官方文档对于怎样写一个layer描述较为简略,于是我做了一些测试,创建两个layer,privilege-a和privilege-b,下面是测试结果:
"privilege-b/funcs.el" "privilege-b/config.el" "privilege-a/funcs.el" "privilege-a/config.el" "privilege-b/extensions.el" "privilege-a/extensions.el" "privilege-b/init-slime" "privilege-a/init-slime" "privilege-b/post-init-slime" "privilege-a/post-init-slime" "privilege-b/init-speedbar" "privilege-a/init-sr-speedbar" "privilege-a/init-sr-speedbar use-package :init" "privilege-b/init-sr-speedbar" "privilege-a/post-init-sr-speedbar" "privilege-b/keybindings.el" "privilege-a/keybindings.el" "privilege-a/init-sr-speedbar use-package :config"
无论privilege-a和privilege-b在dotspacemacs-configuration-layers中次序如何,总是privilege-b先行加载,这是个悲伤的结论,意味着我们想创建一个layer覆盖内置layer部分配置的想法破灭了。
spacemacs优先加载每个layer下面的funcs.el和config.el,因此你不应在这两个文件中配置package信息,因为package还没有加载(要等到use-package :init)
如果你想对一个package做一些扩展,比如利用package中的函数定义新的函数,那么应该将你的函数定义在layer/post-init-package中,
:init优先于:config
keybingdings.el处于一个奇怪的位置,我在里面定义package函数键绑定时,提示package未加载,看来还是要在use-package :init中定义
slime始终在sr-speedbar之前加载,无视我在代码中的书写顺序
我个人推荐创建个人layer时使用init-前缀,这是源自el-get的习惯。