Slim-Vim

This project is currently abandoned. Both Larry and Brad have announced that they are officially ceasing development on slim-vim (see also Brad's message).

Champion

Larry Clapp

Team Members

Jim Bailey
Brad Beveridge
Eirik A. Nygaard

Proposal

Write a Vim interface to SLIME. Lots of people apparently would like to try Lisp, and would like a nice IDE, and like (or at least know and have installed) Vim, and don't care to learn/use Emacs. Slim-Vim would ease that particular barrier to entry.

How to Contribute

If you want to participate in and/or observe the discussion of the project, you can subscribe to the mailing list at:

http://www.lispniks.com/mailman/listinfo/slim-vim
The list archive is available at the same place. Slim-Vim started out as the Slimpl project, and had a mailing list by the same name. See http://www.lispniks.com/pipermail/slim-vim/ for the archives.

Goal

To provide a Vim extension to interface with the Swank backend, allowing integrated debugging of a Lisp image with Vim. Ideally the extension should work with a stock standard Vim. We want to lower the barrier of entry to Vimmers (or vi-ers, or just to I-don't-want-to-install-emacs-ers), not just have an editor with vi-like key bindings that can talk to Swank. If we merely wanted that, we'd tweak Emacs's Viper mode and have done.

Helping out

This was cribbed from the Slimpl page; some of it may be moot with the upgrade to Vim7.
To do:
  • There is a list of Slime keymappings, these are probably the functions that we need to emulate. SLIMPL Useful slime funcs
  • Points below here simply scraped from one of Larry's emails.
  • An event system of some kind. The list has discussed this before, so several ideas for this exist. I just want someone to complete it, document it, and package it as a stand-alone Vim module. Requirements: I would need to register a Vim function that will get called periodically. Ideally the end-user could specify the period.
  • An interface to the Hyperspec, ideally something that interfaces with Vim's tag system in a sane way.
  • My VILisp has an interface that works for me, but I've gotten little feedback about whether it works for other people. If someone would like to play with it on other operating systems and browsers and report bugs, that would help me improve it. See http://www.vim.org/scripts/script.php?script_id=221.
  • A script to convert the Hyperspec to a Vim help file. (We can't just re-release the Hyperspec as a Vim help file, so far as I can tell; I think that would count as a "derivative work".) Such a script may already exist for general HTML. Great; point us to it!
  • Sytax highlighting for a Slim-vim debugger window. (This will have to wait until we *have* a Slim-vim debugger window, but it's waiting in the shed. (I initially wrote "in the wings", but "in the shed" works better with the gardening metaphor. :)) We have a Slim-vim debugger window now, so have at it with the syntax highlighting!
  • Testing on other operating systems / versions/implementations of Lisp. Known to work on OSX + SBCL & CLISP, Linux + SBCL & CLISP, Win32 is getting there.
  • Documentation on the slime/swank interface. This needn't mention Slim-vim at all, of course, and might get us a few warm fuzzies from the Slime team.
  • A REPL mode for Vim. I envision this as a mostly-normal editor buffer, except that you can't make changes above the last expression (if you try to, the editor should automatically copy the current expression to the last line and start editing it there), and if you press a certain key, it calls a function (which will call Slim-Vim to evaluate the expression and return a result).
  • Someone to scrutinize Vim's indentation system and a) tell us how to tweak it for best results, b) write an indent-expression that adjusts indentation properly, and/or c) tell us how to hook Slim-Vim into it. For example, Vim doesn't, by default, indent FLET expressions very well:
    (flet ((some-long-function-name ()
                                    (expr)))
       ...)
Done:
  • Connect to Swank
  • Eval forms on Swank (in the correct package)
  • Catch debug errors from Swank and invoke a debugger on the Vim side
  • Implement the Slime Inspector
  • Emacs has an asynchronous interrupt facility, Vim doesn't. The closest things I (Larry) can find in Vim to asynchronous interrupts are the CursorHold and RemoteReply events. Interested parties can poke around the Vim help files, source code, news groups, etc, and see if I've missed something, or think about how to implement some sort of poor-man's cooperative multitasking within Vim. For example, we might map the cursor movement keys (hjkl, etc) and all the normally-self-inserting keys (a-z0-9(), etc) to first call the SLIM-Vim event handler. Other suggestions welcome. Jim Bailey's ECL patches give us async socket callbacks. It's not 100% there, but is fine 99% of the time.
  • If someone wants to dig around the Vim main event loop and figure out how to do a real periodic asynchronous event, that'd be way cool, too.

Milestones

Resources

Categories

Gardeners Projects


This page is linked from:

Gardeners Projects Slim-Vim-HOWTO