SpacemacsでClojureを書くために僕が行った設定
ここ数ヶ月、SpacemacsでClojureを書いていました。ちょっと昨日まで積極的に他人に勧めれるような設定になっていなかったので躊躇していたんですが、ようやく納得のいく設定をできるようになったので共有しておきます。 基本的にdevelopブランチを使っています。
使っているSpacemacsのバージョンはSpacemacs v.0.300.0になっています(が、さっきgit pullしたので、安定版よりは少し進んでいる状態だと思います)。 一応、dotspacemacs/test-dotfileは通る状態になっています。
全体像はここに置いてます。
何ができるようになるのか
補完がいい感じになる
括弧の対応が崩れないようになる
いろいろと好みはあると思いつつ、僕の設定を元にClojure書くにあたって設定しておくと幸せになれそうな部分を紹介。大雑把には以下のような設定をしています。 code:init.el
(defun dotspacemacs/layers ()
(setq-default
dotspacemacs-configuration-layers
'(
(clojure :variables
clojure-enable-clj-refactor t
cider-repl-display-help-banner nil
cider-repl-display-in-current-window t
cider-repl-use-clojure-font-lock t
cider-repl-use-pretty-printing t
cider-repl-result-prefix ";;=> "
cider-save-file-on-load t
cider-font-lock-dynamically '(macro core function var)
cider-overlays-use-font-lock t
cider-prompt-for-symbol nil
company-backends-cider-mode-raw '((company-capf :with company-dabbrev-code))
company-backends-cider-repl-mode-raw '((company-capf :with company-dabbrev-code))
:packages
(not cider-eval-sexp-fu helm-gtags parinfer))
)))
clojure-enable-clj-refactor
最近のSpacemacsだとclj-refactorがデフォルトで無効化されているので有効化 cider-repl-display-help-banner
REPL上の最初のヘルプバナーが毎回出てもそこまで嬉しくないので無効化 cider-repl-display-in-current-window
C-c C-zでファイルバッファとREPLバッファをスイッチするときに、現在のバッファを開いているウィンドウで行なうための設定(画面が分割されたりしたくない) cider-repl-use-clojure-font-lock
REPL上でフォントのハイライトを行なうための設定。
cider-repl-use-pretty-printing
REPL上でプリティプリントを行なうための設定
これは結構便利で重宝している
cider-repl-result-prefix
REPL上などで結果を表示する前のプレフィックスを設定
以下みたいに ;;=>を結果の前に表示できる
こうしておくとブログなど書くときに便利(コピペ楽)
code:clojure
user> (map inc (range 10))
;;=> (1 2 3 4 5 6 7 8 9 10)
cider-save-file-on-load
ファイルをロードするコマンド(C-c C-kなど)を利用したときに、無条件でセーブを行なう設定
デフォルトではロードしようとしたときに、セーブしていなかったら尋ねられる
普通に考えるとロードするっていうことはセーブしたいってこと(?)なので、こうしている
cider-font-lock-dynamically
CIDERによってフォントのハイライトを行なうものを指定する設定 これを設定しておくと、:deprecatedメタ情報がついたものがハイライトされたりして便利
cider-overlays-use-font-lock
オーバーレイ上でフォントにハイライトを適用する設定
正確に言うと「ハイライト」ではなく、フォントの強調表示などのフォント設定を有効化って感じなんだけど、説明の簡略化のために「ハイライト」って書いてます
cider-prompt-for-symbol
C-.などでコードジャンプを行なうさいに確認を行なわない設定
company-backends-cider-mode-raw & company-backends-cider-repl-mode-raw
デフォルトのままだと補完できないものがあるので、それを拾うために設定する必要がある
具体的には(defmethod mm :foo/bar [_ long-long-arg1] long|)みたいに書いたときにlong| (|はカーソル位置)補完が効かない
code:init.el
(defun dotspacemacs/user-config ()
(with-eval-after-load 'smartparens
(sp-use-paredit-bindings))
(cljr-add-keybindings-with-prefix "C-c j")
)
(with-eval-after-load 'smartparens (sp-use-paredit-bindings))
(add-hook 'clojure-mode-hook #'spacemacs/toggle-aggressive-indent-on)
これを設定すると名前の通り、ガツガツインデントを揃えてくれて便利(たまにうるさい
(cljr-add-keybindings-with-prefix "C-c j")
code:init.el
(defun dotspacemacs/init ()
(setq-default
dotspacemacs-editing-style '(hybrid :variables
hybrid-mode-default-state 'hybrid
hybrid-mode-enable-hjkl-bindings t)
dotspacemacs-smartparens-strict-mode t
dotspacemacs-smart-closing-parenthesis t
dotspacemacs-whitespace-cleanup 'trailing
))
dotspacemacs-editing-style
完全に好みの問題(通常はVim/Emacsのどちらかになっていると思うけど、VimのエディットモードをEmacsキーバインドでもいけるようにしている
dotspacemacs-smartparens-strict-mode
簡単に括弧の対応を崩れないようにするための設定
比較的熟練者向けな気がするけど、括弧の対応が崩れて困っているなら設定した方がよい
dotspacemacs-smart-closing-parenthesis
良い感じに括弧を閉じてくれる設定
あとこれを設定しておくと既に括弧が閉じられている状態で閉じ括弧相当のキーを押すと直近の閉じ括弧までジャンプしてくれる
dotspacemacs-whitespace-cleanup
末尾のホワイトスペースを消してくれる設定
補完に関する設定
code:init.el
(defun dotspacemacs/layers ()
(setq-default
dotspacemacs-configuration-layers
'(
(auto-completion :variables
company-minimum-prefix-length 1
auto-completion-idle-delay 0
auto-completion-enable-sort-by-usage t)
)))
company-minimum-prefix-length
自動で補完を起動するまでに必要な文字数の設定(短かい方がより少ない入力で自動的に起動できる)
わりと少なめに設定するのが好み
auto-completion-idle-delay
補完が表示されるまでの時間
auto-completion-enable-sort-by-usage
よく利用する補完候補が上位にきやすくなる
code:init.el
(defun dotspacemacs/user-config ()
(with-eval-after-load 'company
(bind-keys :map company-active-map
("C-n" . company-select-next)
("C-p" . company-select-previous)
("C-s" . company-search-candidates)
("C-d" . company-quickhelp-manual-begin)
:map company-search-map
("C-n" . company-select-next)
("C-p" . company-select-previous)))
)
あとはcompany-modeの補完候補が表示されているときのキーバインド設定
個人的にやっていること
.spacemacsを.spacemacs.dディレクトリを作って.spacemacs.d/init.elというファイル名にしています。
Spacemacs的にはどちらでも良いのと、僕の場合パッケージ作りたいこともあるかなーって思ってこうしています。 最後に
あまりSpacemacs特有って感じじゃないですが、いくつか押さえておくと幸せになれると思うものを紹介しました。 詳しくはSpacemacs自身のドキュメントやCIDERのドキュメントを読みましょう。ドキュメントに書いてなくて分からないときは、ソースコード読むと分かると思うのでがんばりましょう :)