What is CharVim?

A hand-crafted Neovim configuration built for developers who want a fast, modern editor without having to stitch plugins together themselves.

The idea

CharVim started as a personal Neovim config and grew into a shareable, opinionated distribution. The goal is simple: give you a Neovim that feels like a real IDE, with LSP, completion, debugging, AI, fuzzy-finding, and multi-cursor support, while staying lean, fast, and true to Vim's modal nature.

Every plugin in CharVim earns its place. Nothing is included just because it's popular. The configuration is built around a daily-driver workflow: writing code, navigating large projects, debugging, and staying in flow.

Philosophy

Language support

CharVim ships with ten pre-configured LSP servers, covering the most common languages for backend, frontend, systems, and document authoring:

Inlay hints are enabled by default on all servers that support them and can be toggled with leaderih.

The themes

CharVim ships with three themes, all switchable at runtime via :ThemeSelect or :Theme <name>. Your selection persists across restarts.

Additional themes available inside Neovim include Tokyo Night, Catppuccin, Gruvbox, and Habamax.

AI integration

avante.nvim connects CharVim to Anthropic Claude (claude-haiku-4-5) for AI-assisted code chat and editing. Use :AvanteAsk to discuss code in context, or :AvanteEdit to apply AI suggestions directly. Add your ANTHROPIC_API_KEY to a .env file at the repo root and it gets loaded on startup automatically.

Installation

Run the one-line install script. It detects your OS, installs missing system dependencies, and symlinks the config into ~/.config/nvim.

bash <(curl -s https://raw.githubusercontent.com/CrtlUserKnown/Charvim/main/setup.sh)

Or clone the repository manually and launch Neovim. Plugins install automatically via lazy.nvim on first start.

Requirements

User customization

Two git-ignored files let you personalize CharVim without touching core config. They are auto-created with template comments on first startup and never overwritten by updates.

nvim/lua/user.lua

Loaded last, after all CharVim modules. Add keymaps, options, autocommands, or override any default:

-- nvim/lua/user.lua
vim.opt.wrap = true
vim.keymap.set('n', '<leader>x', ':!echo hello<CR>', { desc = 'My command' })

nvim/lua/user-plugins.lua

Return a lazy.nvim spec list to add your own plugins:

-- nvim/lua/user-plugins.lua
return {
    { 'folke/zen-mode.nvim', opts = {} },
}
Read the full docs   See the roadmap