A Year of Neovim: Still Mostly Using Vim Keybindings
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
telescope.nvim— fuzzy finding files and grep. I use this constantly.nvim-lspconfig+nvim-cmp— LSP and completion.conform.nvim— formatting. Runsgofmt,goimports,blackon save.gitsigns.nvim— inline git blame and hunk navigation. Genuinely useful.mini.surround— surround operations without the weight of vim-surround.
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.