Moving from VS Code to Neovim
I switched my main editor from VS Code to Neovim about two months ago, and I think it is going to stick.
This is not a “VS Code is bad” post. VS Code is great. I used it for years and it rarely got in my way. The honest reason I switched is that I was curious, I already live in the terminal most of the day (tmux, a bunch of panes), and jumping out to a separate window started to feel like a small tax I paid a hundred times a day. I wanted to try staying in one place.
The first week was rough
I want to be honest about this part, because nobody warned me enough. The first week I was slow. Really slow. I knew the Vim motions in theory, and I had used the Vim extension in VS Code before, but configuring a whole editor from nothing is a different thing. I kept a sticky note of keymaps next to my keyboard. I almost went back twice, both times around 5pm when I just wanted to finish a task and not fight my tools.
It got better in the second week. By the third, the motions were in my fingers and I stopped thinking about them.
What my setup looks like
I went with a config built from scratch instead of a ready-made distro, because the whole point for me was to understand every line. I use lazy.nvim to manage plugins. The pieces I reach for every day:
- telescope for fuzzy finding and grepping the project, backed by ripgrep and fzf
- treesitter for syntax and better text objects
- nvim-lspconfig with mason for language servers, and nvim-cmp for completion
- conform and nvim-lint for format-on-save and linting
- which-key, so when I forget a keymap the menu reminds me
- vim-rails, vim-projectionist and fugitive, since I write a lot of Ruby and Go
- vim-tmux-navigator, so the same
Ctrl-h/j/k/lmoves between vim splits and tmux panes
The theme is Catppuccin Mocha, the same one I use almost everywhere, including this blog. Leader is the space bar. I spent an embarrassing number of hours getting the Tailwind language server to behave inside Rails form helpers, which is exactly the kind of yak-shaving you sign up for when you go down this road.
Is it actually better?
For some things, clearly yes. Moving around a codebase with telescope and treesitter motions is faster than I was before. Macros and the dot command save me real time on repetitive edits. And there is something nice about an editor that opens instantly and barely uses any memory.
For other things, not yet. Debugging is still a smoother experience for me in VS Code. And every few weeks I lose an evening to configuring something that just worked before. That is part of the deal.
The biggest thing is harder to measure. The setup is mine now. When something annoys me I can fix it, because I wrote the config and I understand it. That feeling is worth a lot.
If you are thinking about trying it
A few things I would tell myself two months ago:
- Do not configure everything on day one. Start small, add things when you actually feel the need.
- Learn the plain motions before the plugins. The plugins are nice, but the motions are the real reason to be here.
- Keep VS Code installed. Having a fallback for the bad days takes the pressure off.
- Give it a month before you decide. The first week is not representative.
Two months in, I am not going back. I also do not think I will ever be “done” with the config, and that is part of why I like it.