🖋️

Clojure開発者のためのEmacs設定 2025(with Vim + Claude Code)

に公開

仕事でClojureを使うことになり、4年半ほど使っていたVSCodeからEmacsの利用に切り替えることにしました。Emacsには過去に5年間ほどSpacemacsというディストリビューションでお世話になったので、その思想を折り込んで設定します。

設定には時間も労力もかかりますが、自分だけのエディタができあがりキーボードだけで高速に操作できる体験は何者にも代えがたいです。AI連携のモダンエディタが華やかなりし今、あえてEmacsを選ぶ方の一助や楽しみとなればと思います。

スクリーンショット

Claude Code連携

SKKによるClaude Codeへの日本語入力の摩擦もEmacs側から操作するので問題にならない

Clojure開発

LSP (Language Server Protocol) + CIDERによるREPL開発もできます

注意

EmacsやVimの設定は分かりやすい正解というものがなく、「自分のユースケースに適しているなら短い記述でいいか」となっている箇所もあるのでご容赦ください。また、明らかな間違いを発見された場合は、気軽にコメント頂けると幸いです。

前提

  • Mac + emacs-plus@30がインストール済み
  • 細かい前提条件については、各種設定ファイルの先頭にコメントを記述
  • evilというVimキーバインドを使うパッケージを適用しているため、Vimキーバインドに慣れている方向けです

利用方法

  • 以下2つの設定ファイル(early-init.el, init.el)を~/.emacs.d/以下に配置した上で、Emacsを起動
  • 初回はライブラリのフェッチでとても長い時間がかかり、Warningがいくつか出るが問題ないので無視
  • 2回目以降はスッキリ使えるはず
  • Emacs初心者の方はとりあえずコピペ、少し詳しい方は自分なりにアレンジしてみてください
  • コメントの前方に書いている前提条件や、インストール直後のコマンド実行が必要になってきます

設定 (~/.emacs.d/early-init.el)

EmacsのGUIが描画される前、init.elよりも先にロードされる設定

設定 (~/.emacs.d/init.el)

メイン設定ファイル。2000行近くありますが、これでも少ない方だと思います。

キーバインド

  • SPC: space
  • DEL: backspace
  • RET: enter
  • M- : commandキーを押しながら
  • C- : ctrlキーを押しながら
  • S- : shiftキーを押しながら

基本

  • C-;: ヘルプのトリガー(C-hはbackspaceにしたいので)
  • SPC: 自分で登録したキーバインドを起動するリーダーキー(グローバル)
  • ,: 自分で登録したキーバインドを起動するリーダーキー(ローカル)

独自定義

できるだけ頭の中でニーモニックに従って思い出しやすい命名にしています。

SPC(グローバルリーダー)

キー 操作
SPC SPC M-x 実行
SPC ; コメントアウト/コメントイン
SPC t l 行の折り返しトグル(truncate-lines)
SPC t f flymake の ON/OFF
SPC t c copilot-mode ON/OFF
SPC c vterm 内のディレクトリを移動
SPC q q Emacs 終了
SPC q r Emacs 再起動

ファイル (SPC f)

キー 操作
SPC f f ファイルを開く(find-file)
SPC f r 最近使ったファイルを開く
SPC f p プロジェクト内のファイル検索
SPC f s ファイル保存
SPC f t treemacs を開く
SPC f y プロジェクト相対パスをコピー

init.el (SPC i)

キー 操作
SPC i i init.el を開く
SPC i r init.el を再読み込み

バッファとブックマーク (SPC b)

キー 操作
SPC b b バッファ切替
SPC b d 現在のバッファを閉じる
SPC b h dashboard を開く
SPC b l ブックマーク一覧
SPC b s 現在行をブックマークに追加
SPC b k ブックマーク削除

検索 (SPC s)

キー 操作
SPC s s バッファ内検索
SPC s p プロジェクト検索 ripgrep
SPC s d カレントディレクトリ検索

プロジェクト管理 (SPC p)

キー 操作
SPC p p プロジェクトを切り替える
SPC p f プロジェクト内の解析結果を一覧

ワークスペース / ウィンドウ (SPC w)

キー 操作
SPC w w Workspace切替
SPC w r Workspace 名変更
SPC w d Workspace 削除
SPC w s Workspace 保存
SPC w l Workspace 一覧から選ぶ
SPC w u 直前の画面分割を復元

Git / GoTo (SPC g)

キー 操作
SPC g s magit status
SPC g l magi log
SPC g d プロジェクト内の現在の変更を表示
SPC g b magit blame トグル

Diff/Debug/Docker/DB (SPC d)

キー 操作
SPC d d 現在バッファの変更を表示
SPC d c Dockerコンテナの操作
SPC d b DBに接続

AI (SPC a)

キー 操作
SPC a m Claude Code menu
SPC a a Claude 開始
SPC a b Claude scratch
SPC a s Claude prompt送信
SPC a n Claude 改行
SPC a 1 Claude: send '1'
SPC a 2 Claude: send '2'
SPC a 3 Claude: send '3'
SPC a e Claude ESC
SPC a q Claude 停止
SPC a c Claude continue
SPC a r Claude resume
SPC a l Claude session list
SPC a x Codex 起動

LSP (SPC l)

キー 操作
SPC l s LSP start
SPC l r シンボルのリネーム
SPC l a code actions
SPC l f フォーマット
SPC l R 再接続
SPC l q LSP停止

Motion (g)

キー 操作
g n 次の diff hunk へ
g p 前の diff hunk へ
g t next workspace
g T prev workspace

ローカルリーダー(,) Lisp編集

キー 操作
, s slurp forward
, S slurp backward
, b barf forward
, B barf backward
, r raise
, p splice backward
, ( wrap ()
, [ wrap []
, { wrap {}
, " "" で wrap
, d w delete wrap
, k sexp end まで kill
, y sexp end まで yank
, h eldoc

Markdown

キー 操作
, , GFM チェックボックス toggle

Flymake

キー 操作
] ] 次のエラーへ
[ [ 前のエラーへ

Clojure (SPC m)

キー 操作
SPC m i cider-jack-in
SPC m c c cider connect clj&cljs
SPC m c j connect clj
SPC m c s connect cljs
SPC m q cider quit
SPC m l F clojure-lsp cache clear/restart

Clojure Eval (,)

キー 操作
, e e eval last sexp
, e f eval dwim
, e b eval buffer
, e n eval ns form
, i REPL に defun を挿入
, n r ns refresh
, n s REPL の ns を設定
, t REPL buffer に移動
, R (reload) を REPL に送る

Emacs Lisp (,)

キー 操作
, ' ielm 開く
, e e eval last sexp
, e f eval defun
, e b eval buffer
, i 時刻挿入
, P パッケージが built-in か確認
K helpful-at-point

その他

SKK

キー 操作
C-x j skk-mode ON/OFF
C-j skk 確定

evil-numbers

キー 操作
C-a 数値インクリメント

embark

キー 操作
C-. embark-act(ミニバッファ)
C-, embark-export(ミニバッファ)

vterm toggle

キー 操作
C-' vterm トグル

copilot

キー 操作
C-<tab> Copilot 補完を accept
M-/ Copilot 補完開始(prog-mode)

eglot

キー 操作
C-. コードアクション

to be continued...

Discussion