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))
眼睛痠疼,躺了,明天繼續