一、参考
二、为什么需要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))
四、keyword
列表
keyword名称 | 简单说明 |
---|---|
:after | 单元 2 |
:bind-keymap, :bind-keymap* | 单元 4 |
:bind, :bind* | 单元 2 |
:commands | 单元 4 |
:preface, :init, :config | 单元 2 |
:custom | 单元 4 |
:custom-face | 单元 2 |
:defer, :demand | 单元 4 |
:defines, :functions | 单元 2 |
:diminish, :delight | 单元 4 |
:disabled | 单元 2 |
:ensure, :pin | 单元 4 |
:hook | 单元 2 |
:if, :when, :unless | 单元 4 |
:load-path | 单元 2 |
:mode, :interpreter | 单元 4 |
:magic, :magic-fallback | 单元 2 |
:no-require | 单元 4 |
:requires | 单元 2 |
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。