use-package宏是spacemacs的精髓,实现了package配置的隔离,终于不用将全部的配置放在一块儿,乱得像一锅粥了,延迟加载极大地提高了spacemacs的启动性能。python
(译者增长)新版无需在关键词后使用progn包装多条sexp语句ruby
:init的含义改变了,如今老是在package加载前执行,不管:config是否defered(延迟执行)函数
:init和:config替代了原有的:pre-和:post-关键词post
:idle关键词被移除性能
:defer 接受一个正整数,好比:defer 2,在idle时段2秒后加载测试
新增关键词:preface,使用场景:定义函数和变量,优势1)将代码放在保护模块中,使得编译器不会由于函数未定义而发出警告,优势2)能够定义代码于:if的测试语句中,注意:你只应该在:preface中使用声明和定义,避免使用反作用(破坏性语句)spa
:defines用于定义变量code
:functions用于定义函数regexp
(use-package foo)
加载信息会在*Messsages*缓冲区编译器
:init关键字在package加载以前,执行后续sexp代码(用于初始化工做)
(use-package foo :init (setq foo-variable t))
:config关键字在package家在以后执行(因为defer的存在,:config老是在autoload执行后执行)
(use-package foo :init (setq foo-variable t) :config (foo-mode 1))
:init和:config一块儿使用的例子
(use-package color-moccur :commands (isearch-moccur isearch-all) :bind ("M-s O" . moccur) :init (bind-key "M-o" 'isearch-moccur isearch-mode-map) (bind-key "M-O" 'isearch-moccur-all isearch-mode-map) :config (use-package moccur-edit))
(use-package ace-jump-mode :bind ("C-." . ace-jump-mode))
:bind会在ace-jump-mode加载后执行绑定,你能够用M-x describe-personal-keybindings查看你经过.emacs设置的键绑定。
(use-package ace-jump-mode :commands ace-jump-mode :init (bind-key "C-." 'ace-jump-mode))
:commands关键字使得命令在用到时才被加载,而:init不管ace-jump-mode是否成功加载,均会执行。
(use-package hi-lock :bind (("M-o l" . highlight-lines-matching-regexp) ("M-o r" . highlight-regexp) ("M-o w" . highlight-phrase)))
:bind的更多用法
(use-package ruby-mode :mode "\\.rb\\'" :interpreter "ruby") ;; The package is "python" but the mode is "python-mode": (use-package python :mode ("\\.py\\'" . python-mode) :interpreter ("python" . python-mode))
固然下面这种写法也可以defer执行
(use-package ace-jump-mode :defer t :init (autoload 'ace-jump-mode "ace-jump-mode" nil t) (bind-key "C-." 'ace-jump-mode))
眼睛酸疼,躺了,明天继续