Neovim
Neovim is a fork of Vim that replaced Vimscript with Lua as the configuration language, added a built-in LSP client, and exposed a proper API so plugins can talk to the editor asynchronously. Those three changes are why it is worth treating as a different tool rather than a newer Vim.
I use it as the single interface to everything I write: namelist and Fortran edits for WRF runs, Python analysis, Nix modules, and these notes. That uniformity is the actual argument for it. A modal editing model takes weeks to stop costing you time, but once it is in your hands it is the same in every file type, over SSH on a compute node, and inside a git rebase.
Why Lua configuration changed things
Vimscript made non-trivial configuration painful enough that most people copied someone else’s .vimrc and stopped there. Configuring in Lua means the editor config is ordinary code — it can be split across modules, reasoned about, and read six months later. My own configuration grew large enough to need its own set of notes, which would not have happened under Vimscript because I would have given up first.
The built-in LSP client matters for the same reason. Language intelligence stops being some plugin’s private concern and becomes something the editor itself exposes, so diagnostics, completion, and formatting can be wired together deliberately rather than by whichever plugin happened to load last. The LSP architecture notes cover how I have that arranged.
The honest cost
The plugin ecosystem moves fast and breaks. A configuration left alone for a year will have plugins that no longer load against a current Neovim, and the breakage usually surfaces as a cryptic Lua stack trace at startup rather than a useful message. Pinning helps; I pin mine through the NixOS flake, which trades update convenience for the property that rebuilding a machine reproduces the editor exactly.
The larger cost is often understated: this is a tool you assemble. Every capability an IDE ships pre-configured — debugger integration, project-wide rename, a test runner — is a decision you make and then maintain. That is worth it if you spend most of the working day in the editor and want it to behave identically on a laptop and a cluster login node. It is not worth it otherwise, and I would not push it on anyone whose answer to “does your editor annoy you?” is no.
See also: text editors for the general category, and my configuration notes for how the pieces are actually wired together.