パッケージ管理したい(use-package)
(require 'package)
(setq package-archives
'(("gnu" . "https://elpa.gnu.org/packages/")
("melpa" . "https://melpa.org/packages/"))
)
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package)
)
(eval-when-compile
(require 'use-package)
)
(setq use-package-always-ensure t
use-package-expand-minimally t
use-package-compute-statistics t
)
use-packageはパッケージ管理を強化するパッケージです。
Emacs24から利用がはじまり、Emacs27あたりから、標準的なパッケージとして使われています。
パッケージを読み込みたい
;; before
(require 'foo)
;; after
(use-package foo)
これまでrequireしていたパッケージを、use-packageに置き換えるだけです。
変数を設定したい(:custom / :init / :config)
;; これまで
(require 'foo)
(setq foo-option t)
;; 置き換え
(use-package foo
:custom
(foo-custom t)
:init
(message "before loading foo")
(setq foo-before t)
:config
(message "after loading foo")
(setq foo-after t)
)
:customオプションで、パッケージ設定を宣言的に変更できます。
これは内部的にcustom-set-variableを使用しています。
これまでのようにsetqを使って設定することもできます。
:initオプションは、パッケージを読み込む前、
:configオプションは、パッケージを読み込んだ後に実行されます。
注釈
:initや:configでは、任意のElispコードを使って自由に設定できます。
しかし、よほどのElisp上級者でない限り、:customで設定変更することをオススメします。
フックしたい(:hook)
(require 'foo)
(add-hook 'foo-mode-hook #'function)
(use-package foo
:hook
(foo-mode . func)
)
:hookオプションで、パッケージを読み込んだときのフックを設定できます。
これはadd-hookの置き換えです。
キーバインドしたい(:bind)
(require 'foo)
(global-set-key (kbd "C-key bind") 'foo-function)
(use-package foo
:bind
("C-key bind" . foo-function)
)
:bindオプションで、パッケージごとにキーバインドを設定できます。
これはglobal-set-keyとkbd関数の置き換えです。
リポジトリ指定したい(:straight)
(use-package some-package
:straight (some-package
:type git
:host github
:repo "user/repo"
:branch "main"
)
)
:straightオプションで、パッケージのリポジトリを設定できます。
ブランチやタグも指定できるので、バージョンを細かく管理できます。
注釈
:straightを使うにはstraight.elとuse-packageの連携の設定が必要です。
straight.elはpackage.elのようなパッケージ管理ツールです。
よく使うパッケージしたい
(use-package which-key
:config
(which-key-mode)
)
(use-package vertico
:init
(vertico-mode)
)
(use-package orderless
:custom
(completion-styles '(orderless basic))
(completion-category-defaults nil)
(completion-category-overrides nil)
)
(use-package marginalia
:init
(marginalia-mode)
)
(use-package consult
:bind
(("C-s" . consult-line)
("C-x b" . consult-buffer))
)
(use-package magit
:bind ("C-x g" . magit-status)
)