vim-elisp — Engineering Report

Grammar is mirrored, not guessed

The syntax grammar in syntax/elisp.vim is built from the elisprs language server's own corpus (src/lsp.rs: SPECIAL_FORMS + SUBRS). The 18 special forms and the built-in subr set that Vim highlights are exactly the surface the language server knows, so highlighting and completion stay in agreement.

Lisp indentation

Emacs Lisp is an S-expression language, so indentation is delegated to Vim's built-in lisp indenter rather than a brace-column rule. lispwords is populated with the special forms plus common binders (let, when, dolist, save-excursion, …) so their bodies indent by a fixed offset.

Run wiring

There is no separate lint / parse-only mode: elisp FILE.el lowers the file to fusevm bytecode and evaluates it, surfacing parse and runtime errors alike. :make and :ElispRun both route through elisp % into the quickfix list.

LSP / DAP contract

The language server and debug adapter are launched with only --lsp or --dap — never with an appended --stdio, which the binary rejects before the JSON-RPC handshake. The plugin registers elisp --lsp with vim-lsp and documents coc.nvim and nvim-dap configurations.

elisp FILE.el   evaluate a file (lowered to fusevm, run on fusevm)
elisp -e EXPR   evaluate an expression and print its value
elisp --lsp     language server over stdio
elisp --dap     debug adapter over stdio

Back to documentation · Source on GitHub