-
Notifications
You must be signed in to change notification settings - Fork 0
Home
ctrlvim is a text editor built from scratch in Rust, modeled after Neovim's editing model. Its terminal UI, cvi, is built with Ratatui and adds a startup dashboard, a file explorer, a plugin manager, and a settings screen on top of a modal editing core.
This wiki is the reference documentation for the project. The project itself was built mostly for the author's own use. It is not trying to replace Neovim for everyone, it is trying to be the editor that fits how the author personally wants to work, with Neovim's editing model as the foundation and a few things Neovim does not do natively layered on top.
If you are installing ctrlvim for the first time, read Installation and then Configuration.
If you already use Neovim and want to know what carries over, read Neovim Compatibility below and then Language Servers, since your existing lsp.lua will most likely work without changes.
If you want to build ctrlvim from source or understand how the codebase is organized, read Building from Source and Architecture.
- Installation, covers the install script and the Makefile install targets.
- Building from Source, covers the crates, the cargo commands, and the build requirements.
- Configuration, is the full reference for
config.toml. - Keybindings, lists every default mapping and how the mapping layer works.
- Language Servers, covers
lsp.luaand how ctrlvim's LSP client attaches to a project. - Plugins, covers the
[[plugin]]config section and the Lua plugin API. - Architecture, is a tour of the crate layout and how the pieces fit together.
ctrlvim is modeled after Neovim rather than being a fork of it. The editing engine, the regex engine, the Vimscript interpreter, and the terminal UI are all original Rust implementations. Where it matters most for day to day use, though, ctrlvim reuses Neovim directly instead of reimplementing it: the vim.lsp Lua runtime that ships with ctrlvim is vendored unmodified from Neovim itself.
That means an lsp.lua written for real Neovim, using vim.lsp.config(...) and vim.lsp.enable(...), works on ctrlvim without changes. See Language Servers for details.
ctrlvim is under active development. Keybindings, config sections, and defaults can change between commits. The Keybindings page and the in editor ? help are always generated from the live mapping table, so they cannot drift out of date with what the keys actually do, but this wiki is written by hand and may lag behind a very recent change.