Tools

A Year of Neovim: Still Mostly Using Vim Keybindings

Neovim in a dark terminal

I switched from Vim to Neovim in March 2025. The short version: it was worth it, not for the reasons I expected, and the transition was messier than it needed to be because I tried to do too much at once.

Here's what actually changed after a year.

Why I switched

I'd been using Vim since 2017. My config was a 600-line vimrc accumulated across jobs and machines, with about 40% of it doing things I no longer understood. LSP support through coc.nvim worked, mostly, but required Node.js to be installed, which felt wrong. gopls integration was flaky in a way I'd stopped trying to fix.

The actual trigger was a coworker's Neovim setup that had working inlay type hints for Go. I wanted that. One afternoon of config later, I had it. The rest followed.

What actually improved

LSP is genuinely better. nvim-lspconfig + gopls works reliably in a way that coc.nvim never did for me. Inlay hints work. Go-to-definition across module boundaries works. The error display is fast. This is the thing I notice every day.

Lua config is more readable than Vimscript. I don't love Lua, but I can read and debug it without having to remember which version of Vimscript I'm using. My init.lua is about 350 lines, all of which I could explain if asked.

Treesitter syntax highlighting. This is subtle but real — better highlighting in Go especially, where the old regex-based approach made some patterns look wrong.

What didn't change

My actual editing patterns. I use hjkl, motions, text objects, macros, marks, and registers in roughly the same proportion I always did. The power of Vim is the modal editing model, and that didn't change at all.

People who switch to Neovim and immediately install a file tree plugin, a status line, a fuzzy finder, a session manager, and a dashboard are making the same mistake I see people make with mechanical keyboards: confusing the tool with the skill. The skill is the editing model. The tool supports it.

Plugins I kept

Plugins I removed

nvim-tree (file tree) — I use Telescope for file navigation. The tree was solving a problem I don't have. lualine (status line) — the default status line is fine. alpha-nvim (start screen) — I don't need a dashboard, I need to open files. The plugin list is now seven items. That feels correct.

The one thing I miss from Vim

Nothing meaningful. There are small behavioral differences in a few edge cases with visual block mode, but nothing that affects actual work. I spent the first month expecting to miss something significant and never found it.

If you're a Vim user on the fence: the migration is straightforward if you do it incrementally. Start with your existing keybindings and only replace the things that don't work. Don't install thirty plugins on day one.


SQLite post · All posts · Reading code →