vim-elisp

July 19, 2026 · View on GitHub

██╗   ██╗██╗███╗   ███╗    ███████╗██╗     ██╗███████╗██████╗
██║   ██║██║████╗ ████║    ██╔════╝██║     ██║██╔════╝██╔══██╗
██║   ██║██║██╔████╔██║    █████╗  ██║     ██║███████╗██████╔╝
╚██╗ ██╔╝██║██║╚██╔╝██║    ██╔══╝  ██║     ██║╚════██║██╔═══╝
 ╚████╔╝ ██║██║ ╚═╝ ██║    ███████╗███████╗██║███████║██║
  ╚═══╝  ╚═╝╚═╝     ╚═╝    ╚══════╝╚══════╝╚═╝╚══════╝╚═╝

CI Docs Syntax LSP License: MIT

[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

CapabilityMechanism
Filetype detection*.el, .emacs, _emacs, elisp shebang
Syntax highlightingstandalone syntax/elisp.vim (special forms + subrs)
IndentationVim built-in lisp indenter + lispwords
Run / :makeelisp % (evaluate the file)
Language servervim-lsp / coc.nvim via elisp --lsp
Debug adapternvim-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/FIXME markers
  • Strings, char literals (?a, ?\C-x), keyword symbols (:foo)
  • Quote sugar: ', `, ,, ,@, #'
  • Numbers, including #x / #o / #b radices 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

VariableEffect
g:vim_elisp_no_mapsskip the <LocalLeader>r mapping
g:vim_elisp_no_lspskip 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.