A Basic CIDER Configuration with use-package
CIDER is a Clojure IDE for Emacs.
CIDER provides a lot of really useful utilities for working with clojure. That said, it
took me a while to get comfortable. Together with clj-refactor and clojure-mode the
host of configuration options and keybindings can be totally overwhelming. I'll explain
my configuration and workflow below in hopes that it provides a nice starting point.
Emacs Configuration
use-package is a macro for
configuring packages in emacs. Let's use it to configure clojure-mode first.
(use-package clojure-mode :ensure t :mode (("\\.clj\\'" . clojure-mode) ("\\.edn\\'" . clojure-mode)) :init (add-hook 'clojure-mode-hook #'yas-minor-mode) (add-hook 'clojure-mode-hook #'linum-mode) (add-hook 'clojure-mode-hook #'subword-mode) (add-hook 'clojure-mode-hook #'smartparens-mode) (add-hook 'clojure-mode-hook #'rainbow-delimiters-mode) (add-hook 'clojure-mode-hook #'eldoc-mode) (add-hook 'clojure-mode-hook #'idle-highlight-mode))
- I always want
clojure-modeinstalled on my system so I designate:ensure t - activate
clojure-modewhenever I open a file with the.cljor.ednextensions - use
:initto add hooks for minor-modes we want activated before theclojure-modepackage is loaded. These are just some of the minor-modes I personally find useful when writing clojure. You'll have to ensure that these modes are installed separately.smartparens-modeand similar modes likepareditandlispyare quite useful for programming in languages with nested delimeters like Clojure.
Now let's configure CIDER:
(use-package cider :ensure t :defer t :init (add-hook 'cider-mode-hook #'clj-refactor-mode) :diminish subword-mode :config (setq nrepl-log-messages t cider-repl-display-in-current-window t cider-repl-use-clojure-font-lock t cider-prompt-save-file-on-load 'always-save cider-font-lock-dynamically '(macro core function var) nrepl-hide-special-buffers t cider-overlays-use-font-lock t) (cider-repl-toggle-pretty-printing))
What's going on here?
- ensure cider is installed
- activate
clj-refactor-modewithciderwithadd-hook :diminishhides thesubword-modeminor mode symbol from the mode-line ifdiminish.elis installed
The :config keyword specifies code to be executed after the package is loaded. Here
we configure some of cider's variables. Each of the following settings is explained in
detail in the CIDER readme too:
nrepl-log-messages: useful for debuggingcider-repl-display-in-current-window: switch to REPL in this windowcider-repl-use-clojure-font-lock: syntax highlighting in REPLcider-prompt-save-file-on-load: just always save when loading buffercider-font-lock-dynamically: syntax highlight all namespacesnrepl-hide-special-buffers: hide nrepl buffers from menucider-overlays-use-font-lock: syntax highlight evaluation overlayscider-repl-toggle-pretty-printing: REPL always pretty-prints results
I'll leave you with some of the other package configurations for related modes
(some referenced above). Enjoy!:
(use-package cider-eval-sexp-fu :defer t) (use-package clj-refactor :defer t :ensure t :diminish clj-refactor-mode :config (cljr-add-keybindings-with-prefix "C-c C-m")) (use-package smartparens :defer t :ensure t :diminish smartparens-mode :init (setq sp-override-key-bindings '(("C-<right>" . nil) ("C-<left>" . nil) ("C-)" . sp-forward-slurp-sexp) ("M-<backspace>" . nil) ("C-(" . sp-forward-barf-sexp))) :config (use-package smartparens-config) (sp-use-smartparens-bindings) (sp--update-override-key-bindings) :commands (smartparens-mode show-smartparens-mode))
Up next I'll cover a digestible subset of CIDER commands…