一、参考
emacs 系列文章目录——更新 ing
use-package
Configuring Emacs from Scratch — use-package
二、为什么须要use-package
?
当配置好 init.el
后,常常会呈现上面的两个问题
2.1 可移植性
当须要在其余机器中,配置 emacs
时候,如果不能保障须要的 packages
都装置,可能导致 init.el
中的许多配置不能失效
2.2 代码构造太扁平
因为在 init.el
中,有多个 packages
都须要配置,然而 init.el
是所有包的配置文件,随着 packages
的增加,可能会呈现配置之间的抵触
2.3 解决 packages
的装置问题
(defvar my-packages '(spacemacs-theme company))
(dolist (p my-packages)
(when (not (package-installed-p p))
(package-install p)))
下面的形式,能够解决 2.1 可移植性
,然而不能很好的解决 2.2 代码构造
引入新的 package
——use-package
能够很好的解决下面的两个问题
三、根本应用
3.1 装置
M-x package-install <RET> use-package <RET>
3.2 根本语法
(use-package <package-name>
:init
<code to be executed before loading the package>
< 加载包之前,执行的代码 >
:config
<code to be executed after loading the package>
< 加载包之后,执行的代码 >
:bind
<key bindings for this package>)
3.3 示例
(1) 没有应用use-package
(global-company-mode t)
(define-key company-active-map (kbd "C-n") 'company-select-next)
(define-key company-active-map (kbd "C-p") 'company-select-previous)
(setq company-idle-delay 0.0)
(2) 应用use-package
(use-package company
:bind (:map company-active-map
("C-n" . company-select-next)
("C-p" . company-select-previous))
:config
(setq company-idle-delay 0.3)
(global-company-mode t))
3.4 保障应用的 package
都存在
(use-package magit
:ensure t
:bind ("C-x g" . magit-status))
语句 :ensure t
保障了所有本地不存在的 package
都会被装置后在应用
3.5 保障 use-package
装置
(when (not (package-installed-p 'use-package))
(package-refresh-contents)
(package-install 'use-package))