Sat 17 Sep 2005

My current development setup

The issue of which tools to use for Lisping comes up occasionally on comp.lang.lisp, and more frequently on #lisp. Invariably, the majority answer is a rallying cry of “emacs!”, but I'm a seasoned Vim user, so I always gently make the case for the defence.

I've blogged about this before (wow! almost a year ago!), but my setup evolves, so it's time for another post. This is a massively egotistical post, then, but bear with me.

I do a lot of stuff in the Terminal. With Mac OS X 10.4, Apple's Terminal application is now vastly faster than iTerm, my previous favourite, and approaches xterm — but it does transparency. A very recent change (yesterday) was to drop my font size right down, from Monaco 10 to Monaco 8, and rely on anti-aliasing. My iBook's 1024x768 display now shows 208x65 columns, which is more than enough to have two decent terminals open and still have room for an editor.

I've become quite a fan of Monaco, actually — even in Vim I've switched from Andale Mono, and I've also dropped the font size (though I'm less happy about it). Coupled with the ps_color theme for Vim, I have a very ergonomic setup, but can see a lot of text at once.

I use Vim's window splits a lot, both to edit multiple files and to reference different parts of the same file, and I also use the mini buffer explorer to see what I'm working on. Syntax highlighting, VIlisp, sometimes taglist, and custom .vimrc settings round out my editing experience nicely.
VIlisp warrants a mention of its own. This ever-reliable plugin basically does two things: provides a conduit between Vim and any application, and lets you do things with s-expressions. The usual thing to do, then, is to launch a local Lisp executable, and evaluate code straight from Vim. However, you can also launch ssh, resume a screen session, and pipe things to a running Lisp — all without actually having to set plugins up. I have used this, and it's useful.

The separation of Vim and the conduit is a feature, not a bug. If I end up in a terminal somewhere, looking up something in less, I can quickly open it in a terminal Vim session… and VIlisp works through the same pipe. Multiplexing! Furthermore, I actually have a proper Terminal REPL, just in case.

What I am missing is some of the useful integration that a full-featured complex monster like SLIME offers. A debugger, integrated describe, HyperSpec lookup, and so on. However, I find that Vim gives me at least the proverbial 80%; I don't do much debugging that a stack trace and my brain can't fix, and Quicksilver gives me HyperSpec lookups via Google (or I could fall back on specbot…).

The other part of my workflow is darcs. I keep a local repo for all of my code, and I have a remote repo on my development server. ssh-agent gives me passwordless logons, so as I work I regularly run a little shell script to record my changes and push them out. I rarely have to actually restart my remote application, because I re-evaluate any changes as I'm making them — macro definition changes are the main reason for a reload.

In about 2 months I've checked in 286 revisions on my main codebase, which is about 7 per work day. (I wonder if this is atypical behaviour; I seem to use my RCS as a history, rather than just recording major changes.)

My screen layout, then, is as follows:
  1. Vim
  2. Terminal, connected to my remote Lisp
  3. Terminal, in my local source directory, mostly for darcs
  4. Colloquy, #lisp
  5. Colloquy, #swig
  6. Adium contact list
  7. Adium conversations
OmniWeb and Mail float over the top; everything else hides.

I feel productive!

Posted at 2005-09-17 14:23:07 by RichardLink to My current develop…
Comments, trackbacks.

Google
Web holygoat.co.uk
  • richard is: