tags:

views:

4125

answers:

13

I've been using Lisp on and off for a while but I'm starting to get more serious about doing some "real" work in Lisp. I'm a huge Vim fan and was wondering how I can be most productive using Vim as my editor for Lisp development. Plugins, work flow suggestions, etc. are all welcome.

Please don't say "use emacs" as I've already ramped up on Vim and I'm really enjoying it as an editor.

+5  A: 

Check out the Limp plug-in:

http://www.vim.org/scripts/script.php?script_id=2219

Ben Hoffstein
A: 

Which Lisp, Common Lisp?

J. Pablo Fernández
In this case, yes, Common Lisp. I do some toying around in Scheme as well, but that's more for casual exploratory programming.
Drew Olson
+1  A: 

You can give Emacs with Vim emulation a try, is not perfect, but it may be somewhat familiar. I think Lisp shines if you use something like Slime or DrScheme doing iterative development, all other editors feel just wrong.

J. Pablo Fernández
+1  A: 

:set lisp

Vim has a mode to help you indent your code by Lisp standards.

Also, I modify the lispwords to change how vim indents my code.

:setl lw-=if (in ~/.vim/ftplugin/lisp.vim)

graywh
indenting is easy. Providing a good IDE is much more important. Actually VIM won't even do that (indentation) as well as Emacs/SLIME does.
Luís Oliveira
A: 

I know you said not to tell you to use Emacs.

Use Emacs.

Serious, the SLIME setup for Emacs is pretty much the standard development platform for Lisp, and for very good reason.

Just Some Guy
+2  A: 

SLIME for EMACS is a wonderful tool for LISP programming. The best part is sending code written in your editor straight to a live LISP session. You can get similar behavior out of Vim using the tips here:

http://technotales.wordpress.com/2007/10/03/like-slime-for-vim/

I adjusted my own script so that I can send to either a SBCL or Clojure session. It makes you much more productive and takes advantage of the REPL.

":set lisp" starts the lisp indentation mode for Vim. But it won't work with some dialects like Clojure. For Clojure, use VimClojure.

Some people like LIMP also.

Brian
+5  A: 
Luís Oliveira
Everytime I think about or see this picture I wish there was a Vim variant in Climacs.
Nowhere man
That's silly. You don't need C to customise Vim. Vim is scriptable out of the box in its own language, and most builds support Ruby and Python scripting as well.
Sam Stokes
So, the VIM users that want to use VIM for Common Lisp are the core of all VIM users?? Maybe I'm missing something here...
Will Hartung
You're missing how Venn diagrams work.
Luís Oliveira
@Luis: Actually, the fact that the blue dot is in the center makes it impossible for the green one to not intersect with it. I would say that the author of the diagram is missing how geometry works.
intuited
Green and blue are supposed to intersect.
Luís Oliveira
+1  A: 

There seem to have been attempts at having a SLIME-like integration of Lisp in Vim, but none have really gone as far as needed to be really useful. I think ECL's integration has been done, though, but not committed upstream.

You should find all relevant links from Cliki's page about Vim.

Nowhere man
+19  A: 

Limp aims to be a fully featured Common Lisp IDE for Vim. It defaults to SBCL, but can be changed to support most other implementations by replacing "sbcl" for your favourite lisp, in the file /usr/local/limp/latest/bin/lisp.sh

When discussing Lisp these days, it is commonly assumed to be Common Lisp, the language standardized by ANSI X3J13 (see the HyperSpec, and Practical Common Lisp for a good textbook) with implementations such as GNU Clisp, SBCL, CMUCL, AllegroCL, and many others.

Back to Limp. There are other solutions that are more light-weight, or try to do other things, but I believe in providing an environment that gives you things like bracket matching, highlighting, documentation lookup, i.e. making it a turn-key solution as much as possible.

In the Limp repository you'll find some of the previous work of the SlimVim project, namely the ECL (Embeddable Common Lisp) interface, merged with later releases (7.1); Simon has also made patches to 7.2 available yet to be merged. The ECL interface is documented in if_ecl.txt.

Short-term work is to do said merging with 7.2 and submit a patch to vim_dev to get it merged into the official Vim tree.

Which leads us to the long-term plans: having Lisp directly in Vim will make it convenient to start working on a SWANK front-end (the part of SLIME that runs in your Lisp, with slime.el being the part that runs in the editor - the frontend).

And somewhere in between, it is likely that all of Limp will be rewritten in Common Lisp using the ECL interface, making Limp easier to maintain (VimScript isn't my favourite) and being easier for users to customize.

The official Limp site goes down from time to time, but as pointed out, the download at Vim.org should always work, and the support groups limp-devel and limp-user are hosted with Google Groups. Don't hesitate to join if you feel you need a question answered, or perhaps even want to join in on development. Most of the discussion takes place on the limp-devel list. If you're into IRC, I'm in #limp on irc.freenode.net as 'tic'.

Good luck!

Mikael Jansson
What is the status of this work? Are you still interested in doing work with it?
Erik Garrison
+1  A: 
  • Vim add-ons: Rainbow Parentheses, Lisp syntax
  • SBCL add-ons: rlwrap, sb-aclrepl
  • Workflow: Ion3 (or some other tiled WM) with multiple terminal windows.

    • Edit Lisp in Vim
    • Switch to Lisp window (using the keyboard of course)
    • Use C-r to recall the line to reload the ASDF system in question so your changes become active.
    • Use X Window copy/paste for small snippets/changes.
    • Use DESCRIBE, TRACE and APROPOS heavily.
    • Repeat.
skypher
+1  A: 

Take a look at Nekthuth.

+3  A: 

You might give slimv a break.

osdf
A: 

I'm not an emacs guy either, I learned both in college and thought vim was the easiest to use. But in all seriousness, you can't avoid emacs. Vim rocks on our level, but emacs rocks on a place higher then mere mortals.

Isaiah