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的习惯。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。