

Ask HN: How to get started with a modern Lisp - ColinWright

One of the things necessary to get up and running with any version of Lisp (Scala, Clojure, CL, <i>etc.</i>) is some sort of environment.  Matching braces and brackets by hand is tedious, something machines are better at.<p>I use vi(m), and not Emacs, and I run Ubuntu 13.xx.  What set-up would the HN community suggest I run?<p>Thx.
======
emidln
Brief overview of the landscape:

For clojure/clojure-py/clojurescript, I start out with vim-sexp[0] (for vim
motions over sexpressions; some people prefer the more common paredit.vim[1]),
rainbow-parenthesis.vim[2], and vim-clojure-static[3] (for indention rules,
syntax highlighting, etc).

You'll want those regardless of which way you use to interact with Clojure. On
top of that, you probably want some way to access a REPL. The top contenders
seem to be:

fireplace[4] (NREPL-based quasi-repl)

slimv[5] (SLIME for CL, Clojure, Schemes, etc)

vimux[6]/tslime[7] (copies from vim registers to a tmux/screen window where
you presumably run lein repl or something)

fireplace works pretty well. In theory, it can pick up the rest of the clojure
world's nrepl middleware for advanced features. In practice, nobody seems to
be doing this. I haven't looked into the codebase to figure out how to add
support for various nrepl middleware, but it should be possible.

slimv doesn't seem to be as popular in Clojure land. Most new development is
based around nrepl, but you get some (not all) of its functionality thanks to
ritz[8] being abstracted.

I use vimux and normal vim shortcuts/macros to abstract my workflow. I like
being able to handle cljs and clj in the same manner that I handle Python, Hy,
Perl, and JavaScript. This is probably the route that requires the most vim
knowledge and comfort with programming your lisp environment to make work.

[0] - [https://github.com/guns/vim-sexp](https://github.com/guns/vim-sexp)

[1] - [https://github.com/vim-scripts/paredit.vim](https://github.com/vim-
scripts/paredit.vim)

[2] -
[https://github.com/kien/rainbow_parentheses.vim](https://github.com/kien/rainbow_parentheses.vim)

[3] - [https://github.com/guns/vim-clojure-
static](https://github.com/guns/vim-clojure-static)

[4] - [https://github.com/tpope/vim-fireplace](https://github.com/tpope/vim-
fireplace)

[5] - [https://github.com/kovisoft/slimv](https://github.com/kovisoft/slimv)

[6] - [https://github.com/benmills/vimux](https://github.com/benmills/vimux)

[7] -
[https://github.com/kikijump/tslime.vim](https://github.com/kikijump/tslime.vim)

[8] - [https://github.com/pallet/ritz](https://github.com/pallet/ritz)

~~~
ColinWright
Thank you - much to think about and investigate.

It would be nice to get a similarly detailed response for the Scala and Common
Lisp eco-systems.

