Neovim's editing model, with the conveniences its plugin ecosystem provides built in instead of bolted on.
ctrlvim is a text editor built from scratch in Rust, designed as a faithful reimplementation of Neovim's editing model. cvi is its terminal UI, built with Ratatui.
If you love Vim, but have ever wished for an editor that could be extended with Rust as easily as Lua, this is for you.
Neovim is great, but getting harpoon style file pinning, telescope style pickers, and similar plugin conveniences meant relying on a Lua plugin ecosystem bolted onto a C core. Plugins would break on Neovim updates often enough to be annoying, and startup time kept creeping up as more plugins loaded in. This project reimplements that core in Rust and builds those conveniences in natively instead of leaving them as third party plugins, so there's no plugin manager, no version drift, and no startup cost from loading a dozen Lua scripts.
The project is organized into focused crates, each handling one concern:
| Crate | Purpose |
|---|---|
ctrlvim-text | Rope-backed buffers, marks, undo tree, registers |
ctrlvim-editor | Motions, operators, text objects, window splits |
ctrlvim-regex | Vim regex engine: magic levels, backrefs, lookaround, \zs/\ze |
ctrlvim-lua | Lua embedding and vim.* API compatibility |
ctrlvim-api | #[ctrlvim_api] dispatch generation |
ctrlvim-treesitter | Tree-sitter integration + the highlights.scm → styled-span highlighter |
ctrlvim-async | Tokio event loop and msgpack-RPC |
ctrlvim-vimscript | Vimscript interpreter |
ctrlvim-tui | Terminal UI (Ratatui + crossterm) |
Contributions welcome — make lint runs clippy over the workspace, make test runs the suite, and both gate CI.