A modern, pure-Lua Common Lisp development environment for Neovim, built on the Swank protocol.
Status: stable. v1.0 release. Testing and issue submission welcome!
I wanted a first-class Common Lisp development experience in Neovim without learning Emacs. The existing options are either limited by Vimscript or no longer maintained.
| Plugin | Status | Notes |
|---|---|---|
| vlime | Active | Vimscript-based; limited Neovim integration |
| nvlime | Archived | Good foundation, but unmaintained with unresolved bugs |
| conjure | Active | Multi-language; eval-only for CL, no SLDB/inspector/xref |
| sextant.nvim | Active | LSP-based CL frontend; targets features covered by the LSP spec |
swank.nvim is a drop-in replacement for vlime/nvlime covering the full SLIME feature set: interactive REPL, eval (top-level, region, expression), SLDB debugger, object inspector, cross-reference, macro expansion, disassembly, tracing, profiling, thread management, and compiler diagnostics. It is LSP-compatible -- navigation and completion delegate to any attached LSP server, and Swank covers the features that fall outside the LSP spec.
See the wiki for the full feature list and roadmap.
Neovim 0.10+ required. 0.13+ recommended (used for development and testing).
The default configuration automatically launches sbcl and connects to Swank when you open a .lisp file.
You don't need to write any startup scripts or start a server manually.
All you need is:
- A Common Lisp implementation installed (e.g.
sbcl) - Quicklisp installed in the default location (
~/quicklisp/)
Install SBCL:
# Debian/Ubuntu
sudo apt install sbcl
# Arch
sudo pacman -S sbcl
# macOS
brew install sbclInstall Quicklisp (one-time setup, any implementation):
curl -O https://beta.quicklisp.org/quicklisp.lisp
sbcl --load quicklisp.lisp \
--eval '(quicklisp-quickstart:install)' \
--eval '(ql:add-to-init-file)' \
--quitThat's it. Open a .lisp file in Neovim and swank.nvim handles the rest.
No Quicklisp? SBCL bundles Swank via ASDF. swank.nvim will automatically fall back to
(require :swank)if Quicklisp is not found.
| Implementation | Support | Notes |
|---|---|---|
| SBCL | ✅ Primary | Recommended. Best SWANK support. |
| CCL (Clozure CL) | SWANK is well-supported | |
| ECL | SWANK works; some features limited | |
| ABCL | Runs on JVM; SWANK can be quirky | |
| CLISP | ❌ Untested, Not recommended | SWANK support is minimal |
To use a different implementation, set autostart.implementation in your config:
opts = { autostart = { implementation = "ccl" } } -- or "ecl", "abcl", "/usr/local/bin/sbcl", etc.If you want to manage the SWANK server yourself (remote machines, custom setups,
autostart.enabled = false), start it from your CL image:
(ql:quickload "swank" :silent t)
(swank:create-server :port 4005 :dont-close t)Then connect from Neovim with <Leader>lc.
lazy.nvim:
{ "corigne/swank.nvim" }Pass any options via opts. See the Configuration wiki page for the full reference.
Requires: Neovim 0.10+. See Prerequisites above.
The wiki contains more detailed documentation, guides and common troubleshooting steps.
See :help swank.nvim after installation.
See the wiki for detailed completion instructions.
Keybinds can be introspected with snacks.nvim's keybind tool (<Leader> sk by default)
See the wiki for a full list of keybindings and how to customize them.
See CONTRIBUTING.md
- SLIME
- Swank
- vlime and nvlime reference implementations for Vim and Neovim, thank you for paving the way
- plenary.nvim
- blink.cmp
MIT