I've tried to "switch to vim" maybe four times over the years, and every time it went the same way. A weekend of enthusiasm, a init.vim copied from someone's dotfiles, two days of fighting my own muscle memory, and then quietly reopening VS Code on Monday because I had actual work to do. The mistake was always the same: treating it as a clean break.
This time I'm doing it slowly, and it's actually sticking.
The trick was to stop trying to replace the editor and instead replace habits one at a time. I started with the VSCodeVim extension, which gives you modal editing inside VS Code. That alone got the motions into my fingers without touching anything else: ciw, dd, f to jump to a character, . to repeat. None of that needs Neovim. It needs about three weeks of feeling slow before it feels fast.
Once the motions were automatic, I moved to actual Neovim for the low-stakes work: editing config files, writing commit messages, quick notes. The high-stakes stuff, the project I'm paid to ship, stayed in VS Code. This split matters more than it sounds. You learn the new tool on tasks where being slow costs nothing, and you keep the old tool for tasks where being slow costs money.
The config is where people lose themselves, so I deliberately kept mine boring. Lua, lazy.nvim for plugins, and a short list:
require("lazy").setup({
"neovim/nvim-lspconfig",
"nvim-treesitter/nvim-treesitter",
"nvim-telescope/telescope.nvim",
"tpope/vim-fugitive",
})
That's most of what I actually use. LSP for the language servers I'd have had anyway, Treesitter for sensible highlighting, Telescope for fuzzy finding, Fugitive because I refuse to learn a second git workflow. Everything else I add only when I hit a wall, not in advance because a YouTube video told me to.
What's surprised me is how much of the appeal is not speed. I'm not faster than I was in VS Code, not yet, maybe not ever in raw terms. The appeal is that the editor is finally made of parts I understand. When something behaves oddly I can find the line that did it. There's no opaque setting buried six menus deep, no extension silently doing something on save. It's a pile of text files I wrote, and that's oddly calming.
I'm maybe sixty per cent moved over. The other forty per cent is debugging UI and the occasional thing where a graphical editor genuinely is better, and I've made peace with that. The goal was never purity. It was to stop reaching for the mouse, and on that measure it's working. Slowly, which turns out to be the only way it ever sticks.