あさた研メモ

主に私が気づいたこととか困った時のメモとか書き留めとく用。

Doom Emacs から Vanilla Emacs に乗り換えた

もう数年間 Emacs を使っているものの、ちょくちょく環境を変えてきた。

最初は Spacemacs を使っていたが、起動が重くて Doom Emacs に切り替えて使ってきた。

しかし、leaf.el の登場で設定が結構簡単に書けるようになるので、これを期に Vanilla の Emacs に乗り換えることにした。

使っているパッケージを整理する

新しく設定を書くにあたって、 Spacemacs や Doom Emacs でサラッと利用していたパッケージがあるので、よく使う機能を整理した。

中には、ディストリビューションが初期状態で搭載しているものもあったので、ここが結構大変だった。

  • ivy
  • swiper
  • flycheck
  • company
  • magit
  • lsp, lsp-ui
  • visual-regexp
  • doom-themes
  • doom-modeline
  • undo-tree

などなど…

他にも、使う言語に関連するパッケージ (tide とか) も整理した。

設定を書く

init.el に leaf.el の例のインストールのやつを書いて、その後各パッケージの設定を書く。

init.el を更新したら、以下のコマンドでバイトコンパイルする。

$ cd ~/.emacs.d
$ emacs --batch -f batch-byte-compile init.el

built-in のパッケージの設定

特に、当たり前に付いてるけど忘れがちなパッケージの設定は結構ハマった。

ちなみに、各設定は、パッケージが登録されてれば leaf-convert-insert-template でパッケージ名を入れれば、デフォルト設定が簡単に入れられる。

  • 行番号の表示を linum で表示
(leaf linum
  :doc "display line numbers in the left margin"
  :tag "builtin"
  :added "2020-08-27"
  :init (global-linum-mode 1))
  • 対応する括弧の自動挿入
(leaf electric
  :doc "window maker and Command loop for `electric' modes"
  :tag "builtin"
  :added "2020-08-27"
  :init (electric-pair-mode 1))
  • ispell を aspell で使う
(leaf ispell
  :doc "interface to spell checkers"
  :tag "builtin"
  :added "2020-08-27"
  :setq-default (ispell-program-name . "aspell"))

追加パッケージの設定

exec-path-from-shell を入れないとシェルの環境変数が読み込まれず、これが一番ハマった。

具体的には、typescript の lspを使うにあたって npm が読み込めず、解決するまでめちゃくちゃ時間かかった。

(leaf exec-path-from-shell
  :doc "Get environment variables such as $PATH from the shell"
  :req "emacs-24.1"
  :tag "environment" "unix" "emacs>=24.1"
  :added "2020-08-27"
  :url "https://github.com/purcell/exec-path-from-shell"
  :emacs>= 24.1
  :ensure t)

なお、exec-path-from-shellserver-start を、init.el の最後の方に追加した。

...
(provide 'init)

(exec-path-from-shell-initialize)
(server-start)

;; Local Variables:
;; indent-tabs-mode: nil
;; byte-compile-warnings: (not cl-functions obsolete)
;; End:

その他

なんか見づらいな〜と思ってたら、フォントの設定を忘れてた。

設定の仕方は、シンプルに

(setq default-frame-alist
      '(
        (font . "Cica 16")))

って感じ。

あと、キーバインドの設定も忘れずに。

(leaf-keys (("C-h"     . backward-delete-char)
            ("C-c M-a" . align-regexp)
            ("C-c ;"   . comment-region)
            ("C-c M-;" . uncomment-region)
            ("C-/"     . undo)
            ("C-C M-R" . replace-regexp)
            ("C-c r"   . replace-string)
            ("<home>"  . beginning-of-buffer)
            ("C-c M-l" . toggle-truncate-lines)
            ("C-M-%"   . vr/query-replace)
            ("C-c v g" . magit-status)
            ("C-c m e" . emoji-cheat-sheet-plus-insert)))

やってみた感想

起動がめっちゃ早くなった。バイトコンパイルの影響もあるのかな?

当たり前だけど、必要なパッケージだけを入れたので、シンプルになった。

個人的に leaf.el のいいな〜と思った点は、 init.el に設定を詰め込んでも leaf-tree-mode で見たい設定のところまで飛べるところ。 大変便利だった。

まだまだ lsp のところが不安。

リモートワークなので tramp-mode を活用したいが、lsp over tramp-mode がどうなるのか分からなくて、そこでまた色々苦戦しそうだなと思っている。


今の Emacs 事情は、viper とか使わないなら変にディストリを使わなくてよくなったなあと思う。

leaf.el 、偉大だなぁ。