Nekthuth: Connection with a Lisp
Overview
Nekthuth is the combination of a vim plugin and a common lisp library which enables vim users to start up or connect to a CL interpreter inside vim, and do interesting things with it.
Features
- Form evaluation
- Tab completion
- Quick macroexpansion
- Extension to syntax highlighting
- Basic Debugger
- On the fly hyperspec rendering inside the vim window
- Extensible plugin architecture
- Connect to a remote lisp or boot one from inside vim
- Find and open source location of symbols under cursor
See the
documentation
for more in depth information, specifically the
installation instructions
to get started.
Changelog
- New in 0.3.4 (17 January 2011)
- Fixed some bugs in the connection code for NekthuthRemote.
- Made it so window splitting is based on how wide your window currently is
- Added g:nekthuth_updatetime (default 500) - sets how long vim waits when not moving cursor to check
- New in 0.3.3 (9 July 2009) (CL package only)
- The way *package* was being handled was funky, and should be consistent across the reader/evaluator/senders now.
- New in 0.3.2 (28 June 2009)
- Another bug where mcclim confused vim with syntax additions. Functions with ] or [ in them will no longer show up as highlighted.
- Install.sh in the vim plugin was using the wrong environment variable
- New in 0.3.1 (27 June 2009)
- Fixed a bug where loading up packages that defined symboles such as \ and ' would cause syntax additions to fail
- Added plugin installation. See the manual for more information.
- Fixed how the main thread and repl thread share sender data, which should translate into faster bootup times.
- New in 0.3 (7 April 2009)
- Multiple return value (using values, such as in #'get-decoded-time) prints correctly in buffer
- Fixed NekthuthInterrupt (0.2 broke it)
- Function coloring and complete added for *package* functions and transitively used packages
- Remote connection now checks the version correctly. This may be useful someday.
- Added #'nekthuth:stop-remote to shut down the remote listener. See remote commands in the manual for more information
- Find and open source locaton of symbol under cursor. See source location in the manual for more information
- New in 0.2 (4 January 2009)
- Remote execution in an already running sbcl instance. See remote setup in the manual for more information.
- Fixed ClHelp not opening a window upon failure
Licenses
Limitations
- Requires SBCL with threads
- Requires vim > 7.0 with +python
- Requires asdf
- I have no idea if it works in gvim, or windows, or solaris, or OSX, or...well just about anything other than my current setup (Gentoo + sbcl 1.0.15 + vim 7.1). Let me know how it goes for you!
Known bugs
I should really use a bug tracker, but for now I'd rather have it out there than spend that time. Current bug/patch submission is via email.
- Debugger doesn't work at all with things that would like to take input, such as the store-value restart
- Debugger has no concept of levels of debugging (but then, how could it if it doesn't take complex input)
- Using NekthuthSexp from inside a string has interesting consequences...
- Python 2.3 returns True on socket.makefile('r').closed, which confuses the nekthuth vim main read loop, meaning that you can't use the remote option if your python is < 2.4 currently (though local evaluation still works).
- If you pull up help, then close the help buffer, then pull up help on the same function, the buffer will be empty.
- If you declaim as such: (declaim (optimize (speed 3) (space 3) (debug 0))) and then (defun a () ()), and call (a 5), you have to kill the lisp process via another terminal.
- If you start-remote, then connect with a vim instance, then stop-remote, you can't start-remote again.
Number of unique bugs submitted via email/irc left until I consider this a real project so I should set up aforementioned tracker: 16
Future milestones / direction
- Become more package aware (set the current package to the correct package of file editing for your thread). Re-color syntax for new symbols that become available.
- Separate SBCL and portable code
- Allow connections to machines other than the local one
- Improve Debugger (this is where the current effort is for 0.4)
- Handle stepping
- Handle interactive restarts
- Handle variable listing
- Handle watching
- Introspection mechanism
- Argument hints for functions (lambda list)
- Hints/completion for loop macro
- Define the concept of a project which maps to an asdf package for a given directory.
Other random ideas
- Plugins for omnicompletion
Contact
Please contact me either at frank@kank.net or through IRC on freenode in the #lisp or #nekthuth channel. I'm herbieB. Someday I'll have a mailing list...someday.
Find out more about me at
http://frank.kank.net/