use-package
文章目录
教程
autoload
使用 :commands 关键字
1 2 3 4 5 6 7 8 9 10(use-package color-moccur :commands (isearch-moccur isearch-all) ;; 自动 autoload :bind (("M-s O" . moccur) :map isearch-mode-map ("M-o" . isearch-moccur) ("M-O" . isearch-moccur-all)) :init (setq isearch-lazy-highlight t) :config (use-package moccur-edit))
key-binding 绑定
参考
功能
:bind
- command 绑定
:bind-keymap
- keymap 绑定
使用
:bind关键字1 2 3 4 5 6 7 8 9 10 11(use-package color-moccur :commands (isearch-moccur isearch-all) :bind (("M-s O" . moccur) ;; 全局绑定 :map isearch-mode-map ;; mode 内绑定 ("M-o" . isearch-moccur) ("M-O" . isearch-moccur-all)) :init (setq isearch-lazy-highlight t) :config (use-package moccur-edit))
特性
自动创建 autoload
1 2(use-package ace-jump-mode :bind ("C-." . ace-jump-mode))- 自动创建 autoload –>
ace-jump-mode 等价实现
1 2 3 4(use-package ace-jump-mode :commands ace-jump-mode :init (bind-key "C-." 'ace-jump-mode))
- 自动创建 autoload –>
绑定 全局 :bind
eg:
1 2 3 4 5 6 7(use-package my-package :bind ( ("key-1" . fun1) ("key-2" . fun2) ) )
keymap 绑定 :bind-keymap
- 使用
:bind-keymap关键字 原因解释
- keymap 不是 function, 因此不能使用 :bind
eg: projectile keymap
1 2 3(use-package projectile :bind-keymap ("C-c p" . projectile-command-map))
local keymap 绑定
local keymap 特点
- local keymap 必须在 package 加载后,才能存在
用法
- :bind 内部嵌套 :map 关键字
解释
- 绑定 keymap 内部存在的 command
特性
- 加载 package 完成后,再 完成绑定
eg: 单个绑定
1 2 3(use-package helm :bind (:map helm-command-map ("C-c h" . helm-execute-persistent-action)))eg: 多组绑定
1 2 3 4 5 6 7 8 9(use-package term :bind (("C-c t" . term) :map term-mode-map ("M-p" . term-send-up) ("M-n" . term-send-down) :map term-raw-map ("M-o" . other-window) ("M-p" . term-send-up) ("M-n" . term-send-down)))
auto-mode-alist (文件 Mode 列表) 和 interpreter-mode-alist (解释器 Mode 列表)
auto-mode-alist
- 使用 :mode 实现
interpreter-mode-alist
- 使用 :interpreter 实现
例子
eg:
1 2 3 4 5 6 7 8 9 10;; package 名 和 mode 名 一致 (use-package ruby-mode :mode "\\.rb\\'" :interpreter "ruby") ;; package 名 和 mode 名 不一致 ;; The package is "python" but the mode is "python-mode": (use-package python :mode ("\\.py\\'" . python-mode) :interpreter ("python" . python-mode))
异步加载 :defer
隐式自动调用 :defer 的关键字
- :bind, :bind*, :bind-keymap, :bind-keymap*, :mode, :interpreter, :hook
shell bang 探测 (类似 #!/bin/bash -e)
- 使用 :magic 关键字
作用
- 类似 :mode 和 auto-mode-alist 指定文件 的 mode
:magic 和 :magic-fallback 比较
- 优先级 :mode > :magic-fallback
eg:
1 2 3 4 5(use-package pdf-tools :load-path "site-lisp/pdf-tools/lisp" :magic ("%PDF" . pdf-view-mode) :config (pdf-tools-install :no-query))- 文件开头匹配 %PDF, 自动启用 pdf-view-mode
Hook 钩子
- 作用:绑定 当前 pakcage 提供的 hook 到 给定的 mode-hook
- :hook 实现
注意
- :hook 到的 mode 不可以添加上
*-hook后缀
- :hook 到的 mode 不可以添加上
例子
eg: 绑定到单个 mode
| |
eg: 绑定到 多个 mode
| |
强制加载 hack 方法
:ensure t- 强制在开始时加载
多个 use-package 代码块
异常问题
- win10 中,第二个 use-package 中的代码,不被执行
解决办法
- 第二个代码块添加 语句
:defer t
- 第二个代码块添加 语句
:hook 无效问题
使用传统方法
1 2(with-eval-after-load 'python (add-hook 'python-mode-hook 'eglot-ensure))
文章作者
上次更新 2022-03-07 (de34a70)