New features
- In-editor grammar management. A new
:grammarcommand brings thevorto grammarCLI into the editor.:grammar(or:grammar list) opens an interactive modal listing every recipe with its install status —j/kmove,Enterinstalls the selected grammar,dremoves it, and the modal stays open across installs.:grammar install <name>… | --alland:grammar remove <name>…also work inline. Installs run on a worker thread, and the active buffer re-highlights on completion with no restart. The command shows up in the which-key hint panel and Tab completion. - Install on open. Opening a file whose language has an install recipe but whose grammar isn’t on disk now shows a yes/no install this grammar? prompt instead of a highlight-failed error. Press
yorEnterto install; the buffer lights up when the install finishes. Each grammar is asked about at most once per session, so opening more files of the same language stays quiet. - Custom
[grammars.<name>]recipes. You can now define grammars outside the built-in catalog inconfig.toml, sovorto grammar install <name>works for them too. Each recipe takes asourcegit URL (aliassrc), an optionalrevto pin a tag, branch, or commit, and an optionalsubpathfor grammars that live inside a monorepo. Queries for custom grammars are user-supplied, since only built-ins carry bundled.scmfiles.
Improvements
- In-process grammar compilation. Grammars now compile in-process via the
cccrate instead of shelling out totree-sitter build, so a C compiler is the only hard build requirement. Thetree-sitterCLI is now a fallback used only for the rare grammar that ships no pre-generatedparser.cand must be generated fromgrammar.js. Grammars that ship onlyparser.cbuild without a C++ toolchain — a C++ compiler is required only when the grammar includes ascanner.cc/scanner.cpp. vorto grammar listgrouped by status. The list now groups grammars by install status and adds a custom (from config) section for[grammars.*]recipes. Pass-vfor the detailed per-grammar view.