Editing a LISP program on Ubuntu with vim

Trying to fill the gap in my computer science education I started to learn LISP again.

I am using the SICP “Structure and Interpretation of Computer Programs, 2nd Edition” book from MIT, that is used to be the book for the first semester students (!) to learn programming.

So I wanted to use the mit-scheme - a LISP interpreter written by the authors of the book. Unfortunately, there is no precompiled version for the 64 bit version of Ubuntu 8.10 Intrepid. But so far the scheme48 seems to be compatible to the examples from the book.

sudo aptitude install scheme48

The command line of the scheme48 is not very convenient so I ended just copying and pasting snippets from the editor into the interpreter window.

All the trolls say, the only way to edit and run LISP programs is to use emacs. There is a working automation solution for vim though - VIlisp.vim. It took me some time to get it work - here is my howto for Ubuntu 8.10 Intrepid:

1. Download and extract the VIlisp.vim

mkdir ~/.vim/lisp
tar -C ~/.vim/lisp --strip-components 1 -xf vilisp.2.3.tgz 

2. Install the required Perl modules

sudo aptitude install libterm-readline-perl-perl \
  libterm-readline-gnu-perl libenv-ps1-perl

In addition I had to install the Pty package through the Perl package-maangement CPAN

sudo cpan
cpan> install IO::Pty
cpan> exit

3. Now we can run VIlisp which connects two windows

In the scheme interpreter window:

export PERL_RL=gnu
perl funnel.pl $HOME/.lisp-pipe scheme48

I’ve created an alias for that

alias lisp='PERL_RL=gnu perl $HOME/.vim/lisp/funnel.pl $HOME/.lisp-pipe scheme48'

so I can just type lisp instead.

In the editor window:

vim exercise1_3.scm

In vim:

:so ~/.vim/lisp/VIlisp.vim

or put something like following to your .vimrc file:

autocmd BufRead,BufNewFile *.lsp,*.lisp,*.scm so ~/.vim/lisp/VIlisp.vim 

so the functionality is loaded automatically for every scheme/lisp source file.

4. Now you can use shortcuts described in the README of VIlisp

  • \ec to evaluate current s-expression
  • \eb sends current visual block to the interpreter


blog comments powered by Disqus