init.el読書会等でいろんな人の設定を見ていると不要な設定が結構多い. 人によっては重複してても自分の設定ファイルに明示的に示していたいということもあるかもしれないですが, いらないものがあるというのはあまり良いことではないと思うので, 年末ですし, 掃除してみるのはいかがでしょうか ?
package.el, Cask, el-get等のパッケージマネージャを使用していることを前提にしています. 何も使っていない場合は削除できない可能性があるので予めご了承ください.
auto-mode-alist
拡張子(厳密にはファイル名だが)とメジャーモードを関連付けるための設定. 以下のようなものです.
(add-to-list 'auto-mode-alist '("\\.coffee\\'" . coffee-mode))
正しくパッケージが書けていればこれらの設定はパッケージマネージャの初期化時(package-initialize
等)で読み込まれます. 主要な拡張子の設定が init.elにある場合は消しても問題ないはずです. もし主要な拡張子でも必要な場合はパッケージがおかしいと考えたほうが良いです. そのパッケージ作成者に報告しましょう. auto-mode-alist
の設定が必要になるときは, 関係のない拡張子のファイルでもそのメジャーモードを使いたいときぐらいです(READMEだろうが, markdown-mode
で開きたい等).
autoload
autoloadは遅延処理を行うための仕組みです(以下に例を示します). 基本的にはパッケージ作者が設定するものですので, ユーザは設定する必要はありません. こっそり内部関数を呼び出し, 遅延処理を実行したいときなど有効な場合がないこともないですが, そのようなケースはほとんどありません. パブリックな関数(foobar-mode, foobar-setup等)で autoloadの設定が必要な場合, パッケージに問題があると考えるべきなので, パッケージ作者に連絡しましょう.
;; 関数(コマンドの場合は第 4引数が non-nil) foobarを実行するとき, foobar.elをロードする
(autoload 'foobar "foobar" nil t)
;; 以下のようなものはいらない
(autoload 'coffee-mode "coffee-mode" nil t)
require
初めから使いたい機能を提供するパッケージ(evilとか helmとか)のロード以外は不要. 特にメジャーモードなどの特定のファイルに特化したものはほとんど不要なはずです. もしそのようなパッケージを明示的にロードしなければならない場合, パッケージの不備です. 先ほどのようにパッケージ開発者にレポートを送るとよいでしょう. またたくさんロードしまくることは起動が遅くなる原因になります. とりあえずロードしておくと設定ファイルのエラーに気づきやすいという利点(??)はあるのですが, そのためだけに起動を遅くしていいかといわれると違う気がします. 起動を早くするためにも不要なロードは避けましょう.
多くの場合ロードしている理由はそうしないと関連する設定でエラーが発生するためだと思うのですが, そのような場合は with-eval-after-load
(Emacs 24.3以下の場合は, eval-after-load
)でその設定を囲ってやってください. こうすることで遅延初期化することができ, ロード時にシンボルが未定義などでエラーが出ることもありません. 以下に例を示します.
(with-eval-after-load 'markdown-mode
(define-key markdown-mode-map (kbd "C-M-i") 'auto-complete)
(define-key markdown-mode-map (kbd "C-c C-c C-l") 'markdown-insert-link)
(define-key markdown-mode-map (kbd "C-c C-c C-i") 'markdown-insert-image)
(define-key gfm-mode-map (kbd "`") nil))