vim-elisp
July 19, 2026 · View on GitHub
██╗ ██╗██╗███╗ ███╗ ███████╗██╗ ██╗███████╗██████╗
██║ ██║██║████╗ ████║ ██╔════╝██║ ██║██╔════╝██╔══██╗
██║ ██║██║██╔████╔██║ █████╗ ██║ ██║███████╗██████╔╝
╚██╗ ██╔╝██║██║╚██╔╝██║ ██╔══╝ ██║ ██║╚════██║██╔═══╝
╚████╔╝ ██║██║ ╚═╝ ██║ ███████╗███████╗██║███████║██║
╚═══╝ ╚═╝╚═╝ ╚═╝ ╚══════╝╚══════╝╚═╝╚══════╝╚═╝
[VIM PLUGIN // NEON SYNTAX // STANDALONE EMACS LISP GRAMMAR // LSP + DAP]
"Emacs Lisp, everywhere but Emacs — driven by the elisprs runtime."
vim-elisp adds Vim / Neovim support for Emacs Lisp, targeting
elisprs — an Emacs Lisp
implementation written in Rust that lowers .el to the
fusevm bytecode VM with a
three-tier Cranelift JIT (the same engine behind zshrs, stryke, arb, and
awkrs).
Read the Docs · Engineering Report
[0x00] OVERVIEW
vim-elisp is a standalone runtime-files bundle — syntax, ftdetect, ftplugin,
indent, compiler, and LSP/DAP wiring — for editing Emacs Lisp with the
elisp binary as the language backend. The syntax grammar mirrors the
elisprs LSP corpus (src/lsp.rs SPECIAL_FORMS + SUBRS), so what Vim
highlights is exactly the surface the language server knows.
[0x01] FEATURE MATRIX
| Capability | Mechanism |
|---|---|
| Filetype detection | *.el, .emacs, _emacs, elisp shebang |
| Syntax highlighting | standalone syntax/elisp.vim (special forms + subrs) |
| Indentation | Vim built-in lisp indenter + lispwords |
Run / :make | elisp % (evaluate the file) |
| Language server | vim-lsp / coc.nvim via elisp --lsp |
| Debug adapter | nvim-dap via elisp --dap |
[0x02] INSTALL
" vim-plug
Plug 'MenkeTechnologies/vim-elisp'
# native packages
git clone https://github.com/MenkeTechnologies/vim-elisp \
~/.vim/pack/plugins/start/vim-elisp
# then inside vim: :Helptags
Install the backend binary:
brew install menketechnologies/menketech/elisprs
[0x03] SYNTAX // TOKEN CATEGORIES
- Comments (
;), shebang,TODO/FIXMEmarkers - Strings, char literals (
?a,?\C-x), keyword symbols (:foo) - Quote sugar:
',`,,,,@,#' - Numbers, including
#x/#o/#bradices and floats - The 18 special forms (
defun,let,cond,lambda, ...) - The built-in subr set exposed by the elisp LSP corpus
- Names introduced by
defun/defmacro/defvar/defconst
[0x04] RUN
:ElispRun " evaluate the current file via elisp
:make " same, into the quickfix list
elisp FILE.el evaluates the file (lowered to fusevm and run); there is no
separate lint mode, so evaluation surfaces both parse and runtime errors.
[0x05] LANGUAGE SERVER
vim-lsp
Registered automatically as elisp --lsp when vim-lsp is present.
coc.nvim
{
"languageserver": {
"elisp": { "command": "elisp", "args": ["--lsp"], "filetypes": ["elisp"] }
}
}
[0x06] DEBUG ADAPTER
local dap = require('dap')
dap.adapters.elisp = { type = 'executable', command = 'elisp', args = { '--dap' } }
dap.configurations.elisp = {
{ type = 'elisp', request = 'launch', name = 'Run Emacs Lisp program', program = '${file}' },
}
[0x07] OPTIONS
| Variable | Effect |
|---|---|
g:vim_elisp_no_maps | skip the <LocalLeader>r mapping |
g:vim_elisp_no_lsp | skip the vim-lsp server registration |
[0x08] LAYOUT
ftdetect/elisp.vim filetype detection
ftplugin/elisp.vim buffer-local settings, :ElispRun
indent/elisp.vim lisp indentation (lispwords)
syntax/elisp.vim standalone Emacs Lisp grammar
compiler/elisp.vim :make wiring (elisp %)
plugin/elisp.vim vim-lsp / coc / nvim-dap wiring
doc/elisp.txt :help vim-elisp
[0xFF] LICENSE
MIT.