About

Why ctrlvim exists

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.

# Why?

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.

# How it's built

The project is organized into focused crates, each handling one concern:

CratePurpose
ctrlvim-textRope-backed buffers, marks, undo tree, registers
ctrlvim-editorMotions, operators, text objects, window splits
ctrlvim-regexVim regex engine: magic levels, backrefs, lookaround, \zs/\ze
ctrlvim-luaLua embedding and vim.* API compatibility
ctrlvim-api#[ctrlvim_api] dispatch generation
ctrlvim-treesitterTree-sitter integration + the highlights.scm → styled-span highlighter
ctrlvim-asyncTokio event loop and msgpack-RPC
ctrlvim-vimscriptVimscript interpreter
ctrlvim-tuiTerminal UI (Ratatui + crossterm)

# Project

Contributions welcome — make lint runs clippy over the workspace, make test runs the suite, and both gate CI.