Writing Clojure With Vim In 2013
January 16, 2013 — 3 minutes long
A couple of recent plugins have made writing Clojure in Vim an absolute joy.
vim-clojure-static by Sung Pae is an extraction of the excellent VimClojure plugin. But it does a few things better. Overall, it’s simpler. It leaves out functionality better served by existing Vim plugins like rainbow_parentheses.vim. It’s lightweight and the source is more accessible since it doesn’t have to include a REPL interface. What it does provide is VimClojure’s excellent syntax, indent, and filetype settings, along with some nice user settings, like fuzzy indenting and pretty multiline strings.
This sets up a great base for editing Clojure.
But alas, if one only installed vim-clojure-static, he or she would be missing out on so much. Here is where we get to the meat of Clojure development in Vim: Tim Pope’s excellent vim-foreplay. This is where we find our REPL interface, though, as Tim says, it’s “not quite a REPL”. And that’s actually perfect.
If you’ve ever tried to use a REPL interface in Vim, you’ll know it’s a dog. The Vim buffer is not meant to be a command line. vim-foreplay leverages Vim’s great buffer editing abilities instead of fighting against them. The result is something magical.
For example, say I have some Clojure code in a buffer:
(deftest test-two (is (= 2 2)))
I can put my cursor over any part of that
is form, then press
and instantly see
true at the bottom of the editor. So I know this
test will pass, and I just wrote it! I could even do the same with that
deftest form, and now the
test-two function is instantly available
I could also put my cursor on that
is form again, press
immediately see its documentation. But if the documentation is not good
enough and I need to see the source — quite common in practice
— I can press
[<ctrl-d> and be in a buffer with the unzipped
and running Clojure source.
Need a quick little prompt for a one-off command?
cqp! Or perhaps a
Vim scratchpad where hitting
enter evaluates the current line?
And then there’s
cqq, which is just like
cqc, but it will copy the
form underneath the cursor into the scratchpad.
There’s even more excitment to vim-foreplay, but I’ll leave that to the reader to discover. The six aforementioned commands have spoiled me for programming with any other language. Coding in Clojure with vim-foreplay is just too much fun, probably because feedback is so immediate. It has changed the way I program and learn.