Those in Emacs land need not worry about excellent Lisp and REPL support. Here in Vim land, however, the ground is less certain. There have been a myriad of attempts to provide Paredit-like editing and SLIME-like evaluating to those who edit modally. Here’s a contemporary look at helping Vim provide the expected slurpage, barfage, evaluation, and more.
What’s slurping and barfing…? See here.
The big difference between this setup and Venantius’ is the change from Paredit.vim to vim-sexp. vim-sexp showed up a couple of years ago and filled in a hole which was sorely left gaping: repeatability. Paredit.vim suffers a fatal flaw, in that it rebinds
. to do its own repeating and it breaks core Vim functionality. Depending on your workflow, this is a deal breaker. If you ever user
. to not retype what you just typed, this is a deal breaker.
vim-sexp just works, when it comes to repeating, partially due to its compatibility with tpope’s
vim-repeat. It also is less strict than Paredit when it comes to manually unbalancing parens, which can annoyingly get in the way in non-trivial use cases. Furthermore, Paredit’s rigidity, in that sense, also leads to situations where parens are left unbalanced by an edit, yet Paredit thinks otherwise and won’t allow one to easily correct the issue.
Alas, vim-sexp’s key flaw appears to be that its bindings are unapproachable. This is primarily due to their Emacs-esque meta chords, rather that Vim’s idiomatic melodies. tpope saved the day, again, with sarcasm and vim-sexp-mappings-for-regular-people. Take a look at the README for an example of how minimal and clean the mappings have become. Combined with vim-surround, as Venantius said, Vim becomes a formidable s-expression wrangler.
Pitfalls to dodge
Start your REPL first
Since vim-fireplace relies on connecting to the nREPL for its inner workings, and manually connecting to such a REPL is tedious, consider just starting the REPL before opening up Vim.
When using vim-fireplace, no
.nrepl-port file is found
If you need to manually
:Connect and type in your nREPL port, there’s something wrong. I’ve found that
lein repl creates the appropriate
.nrepl-port file, while
lein trampoline repl does not. I’ve created an issue on Leiningen’s Github; we’ll see if this is a bug or something intentional.
It’s an exciting time to be in the Clojure world. For those interested in Clojure and game development, take a look at Arcadia for the ability to combine Clojure and Unity. There’s also initial support for connecting the Unity Clojure REPL to vim-fireplace, using arcadia.nrepl.