π― Why 2026 Is the Year of NeoVim
"There has never been a better time to get into NeoVim." The imminent 0.12 release β "the year of NeoVim out of the box" β adds a built-in plugin manager (vim.pack) and a :restart command, among other improvements. 0:00
The constraint that shapes everything: just 10 plugins. "Ultra minimal, ultra maintainable, and ultra powerful." 0:31
π¦ Install 0.12 + Entry Point
Current stable is 0.11, but 0.12 is imminent and "very mature." On Arch (the creator runs CachyOS), install the git build: 1:20
| Step | Command |
|---|---|
| Install (Arch) | sudo pacman -S neovim-git |
| Create entry point | mkdir -p ~/.config/nvim |
| Create init file | touch ~/.config/nvim/init.lua |
| Verify version | nvim β should report 0.12 |
"The entry point is just where NeoVim looks for its configuration when it starts." 3:23
βοΈ Options & Colorscheme
Before touching any plugin, NeoVim has built-in colorschemes β his favorites are zellij-adjacent habamax and zenwritten. He picks habamax plus termguicolors. 5:00
| Category | Options set |
|---|---|
| Line numbers | number, relativenumber, cursorline |
| Wrapping & scroll | nowrap, scrolloff=10, sidescrolloff=10 |
| Tabs | tabstop=2, shiftwidth=2, softtabstop=2, expandtab, smartindent |
| Search | ignorecase, smartcase, hlsearch, incsearch |
| Visual | signcolumn, colorcolumn=100, showmatch, termguicolors |
| Undo | undofile, custom undodir (create it via vim.fn.mkdir) |
| Behavior | hidden, noerrorbells, backspace, autoread, mouse, UTF-8, iskeyword+=- |
| Folds | foldmethod=expr (using Treesitter later) |
He stresses using the built-in :help β e.g. :help tabstop β whenever a setting is unclear. After saving, the new :restart command applies everything without quitting. 14:29
π Custom Statusline
Rather than a plugin, he builds his own statusline (which is why he disabled the default mode display earlier). It's composed of four functions: 15:03
| Component | What it shows |
|---|---|
git_branch() | The current Git branch + icon |
filetype_icon() | A hardcoded icon table (lua, Python, JS/TS, CSS, Markdown, Vim, Bash, Rust, Goβ¦) |
file_size() | Size with KB/MB formatting |
mode_icon() | Custom mode icon (insert/normal/visual) |
All wired via a setup_dynamic_statusline() function triggered on WinEnter and BufEnter autocommands. "We just built it ourselves β still haven't introduced any dependencies, and it's already super usable." 17:38
β¨οΈ Keymaps
Space is the leader (and local leader). Key mappings worth noting: 18:11
| Mapping | Action |
|---|---|
gj/gk | Better movement in wrapped text |
<leader>c | Clear search highlight |
n/N β center | Keep cursor in the middle (zz) |
<leader>p | Paste without yanking (replaces visual selection, leaves register intact) |
<leader>bn/bp | Next / previous buffer |
<leader>sv/sh | Split vertical / horizontal |
<leader>td | Toggle diagnostics |
<leader>pa | Copy full file path |
| Alt+j/k (visual) | Move selected lines up/down (the one VS Code nicety he admits to) |
π Autocommands
"Autocommands are triggered on an event and run an action β formatting code, applying options, whatever." The three he sets: 23:21
| Event | Effect |
|---|---|
TextYankPost | Briefly flash the yanked region (visual feedback without a plugin) |
BufReadPost | Restore last cursor position (with a diff-mode exception) |
FileType md/text/gitcommit | Enable wrap + line break + spellcheck for writing |
π¦ vim.pack β Built-in Package Manager
The headline of 0.12: vim.pack replaces external managers like Lazy. Two commands do the work: 26:13
vim.pack.add("github-url") installs the plugin; vim.pack.load("name") loads it (used for optional plugins). Plugins install to ~/.local/share/nvim/site/pack/core/opt/. A nvim-pack.lock file pins versions β "if you're familiar with Lazy, this is keeping the version for you." 27:06
π§© The 10 Plugins
The full roster, in install order: 28:41
| # | Plugin | Role |
|---|---|---|
| 1 | nvim-tree | File explorer (<leader>e) |
| 2 | fzf-lua | Fuzzy finder (<leader>ff/fg/fb/fh/fx) |
| 3 | mini.nvim | 40+ mini modules: ai, comment, move, surround, indentscope, pairs, notify, icons |
| 4 | gitsigns.nvim | Git hunks + navigation |
| 5 | nvim-treesitter | Syntax understanding, folds, navigation |
| 6 | nvim-lspconfig | LSP configurations |
| 7 | mason.nvim | Installs LSPs, DAPs, linters, formatters |
| 8 | efmls-configs-nvim | General-purpose lint/format language server |
| 9 | blink.cmp | Completion engine |
| 10 | luasnip | Snippet engine |
Treesitter note: he uses the new main branch API (the incompatible rewrite), which removed the old ensure_installed option β so he wrote a function to emulate it, listing which parsers to auto-install. 35:58
π LSP, Lint & Format
The LSP layer uses nvim-lspconfig (sensible defaults) + mason.nvim (package manager for LSPs, linters, formatters). The on_attach function maps shortcuts based on the attached client: 38:58
| Mapping | Action |
|---|---|
<leader>gd | Go to definition |
<leader>gs | Go to definition (split) |
<leader>ca | Code action |
<leader>rn | Rename |
<leader>dl | Line diagnostics |
<leader>fr / fd | References / definitions (via fzf-lua) |
<leader>oi | Organize imports |
<leader>q | Open diagnostics list |
Language servers set up: lua_ls, pyright, bashls, ts_ls, gopls, clangd β installed via Mason. 43:48
For linting + formatting, he uses efm-langserver (a general-purpose language server that plugs in individual linters/formatters) paired with efmls-configs-nvim. The mapping: 45:35
| Language | Linter | Formatter |
|---|---|---|
| Lua | luacheck | stylua |
| Python | flake8 | black |
| JS/TS/React/Vue | eslint_d | prettier |
| Bash | shellcheck | shfmt |
| C/C++ | cpplint | clang-format |
| Go | gorevive | gofumpt |
| JSON | β | fixjson |
Format-on-save is an autocommand on BufWritePre that checks for an attached efm client and formats the buffer. 52:29
π‘ Completion (blink.cmp)
blink.cmp is "a performant, batteries-included completion plugin" β the VS Code-like completion. Sources: LSP, path, buffer, and snippets (via luasnip). Keymaps: ctrl+space show/hide, enter accept, ctrl+j/k navigate, tab/shift-tab next/prev snippet. 53:07
download = true on the pre-built binaries. Then attach the completion capabilities to every language server in the lspconfig list β "so even without a language server, you still get buffer and path completion." 55:43
The demo: a Python file, typing sys. surfaces version_info; the LSP flags a non-callable; flake8 flags the missing blank line; write triggers auto-format. 56:27
π₯οΈ Floating Terminal & Transparency
A hand-rolled floating terminal β an autocommand creates a terminal buffer with numbers/relativenumber/signcolumn off, and a function sizes it to 80% height Γ 80% width. <leader>t toggles it, escape closes it, and it persists between toggles. "This is totally up to you β you can use plugins, but we've hit our maximum of 10." 57:22
Transparency: a set_transparency() function clears highlight groups, plus nvim-tree options β but it only shows if the terminal emulator itself is transparent (he uses Kitty, setting background opacity to 0.8). 58:41
Honorable mentions beyond the 10-plugin limit: Kodium (Windsurf) for AI completion, lsp-saga, lualine, nvim-dap-ui, rustacean, trouble.nvim, vim-fugitive, which-key, and zen-mode. 59:32
β Key Takeaways
- NeoVim 0.12 ships its own plugin manager.
vim.pack.add/vim.pack.loadreplace Lazy, with anvim-pack.lockfor version pinning. No external manager needed. - 10 plugins is the discipline, not the ceiling. Minimalism forces you to use built-ins (colorscheme, statusline, terminal) before reaching for a dependency.
- mini.nvim is the multiplier. One plugin entry unlocks 40+ independent modules β ai, comment, surround, pairs, indentscope, icons.
- Treesitter migrated to a new API. The
ensure_installedoption is gone; you emulate it with a function that auto-installs missing parsers. - The LSP triad is lspconfig + mason + efm. lspconfig for configs, mason for installing servers, efm-langserver for pluggable linters/formatters.
- Format-on-save via autocommand, not a plugin.
BufWritePre+ efm client check does it. - The philosophical point: in the AI era, editing efficiency (motions, macros, navigation) matters more than ever β even as code generation gets free.
π Resources & Links
- πΊ Original video β The Rad Lectures
- π» nvim-lite source β the full config
- πΊοΈ NeoVim 0.12 roadmap