Why I am ditching Vim/Neovim After 12+ Years
This is one of those posts I never thought I would write.
For over a decade, Vim (and later Neovim) wasn’t just an editor for me--it was the editor. It shaped how I think about text, movement, efficiency, and flow. And even now, I am not leaving because Vim is "bad." I am leaving because my priorities changed... and my editor did not.
I still love Neovim. I just stopped loving what it demanded from me.
The backstory (a.k.a. how I ended up here)
I started using Vim when I was 12.
I got my first computer early, and I also played enough games on it that it needed repairs every couple of months. Eventually my dad said he wasn’t paying for any more fixes, and I was on my own. That’s when I discovered there was life outside Windows.
Linux it was.
I installed an ancient version of Ubuntu and spent hours playing Tux Racer. (All that practice absolutely helped me become a menace at Mario Kart later.)
When I started learning to code, VS Code was not a thing yet. The editor everyone around me used was Sublime Text. It was genuinely great... except for one thing: those constant “please buy a license” pop-ups drove me insane.
So I went looking. That’s how I found Vim.
And once Vim clicked, it clicked hard. I fell in love with the minimalism, the speed, the feeling that my hands never had to leave the keyboard. In 2016 I jumped ship to Neovim, but my workflow stayed more or less the same.
I tried switching to VS Code a couple of times, but I never lasted more than 2–3 days. Back then it felt slow and sloppy, it ate RAM, my laptop was weak, and the Vim keybindings were... let’s be generous and call them inconsistent.
So I stayed. Year after year after year.
So why am I switching out?
I genuinely enjoyed Neovim. It was smooth, mature, and ridiculously customizable. The plugin ecosystem is incredible, and for a long time the minimalism felt like a superpower.
But slowly, a bunch of small frictions stacked into one big realization: My editor was saving me milliseconds... while costing me hours.
Issue #1: Configuration. I used to love configuring Neovim. Once a year I’d do a cleanup, rebuild parts of my setup, tweak keymaps, polish the UI. It felt like gardening.
But over time, the fun part got replaced by something else: maintenance. New plugin, configure it. New LSP, set it up. Something breaks, hunt it down. Update chain reaction, fix five things you did not touch. At some point I realized I was spending real, recurring time just to keep my editor from falling apart.
You can view my dotfiles here: https://github.com/gokulp01/nvim-dotfiles. As you’ll notice, it’s over 1000 lines of Lua after a 2024 cleanup, and half of it is basically historical sediment. It works, but I can’t confidently explain all of it anymore without re-learning my own setup. I did the whole “responsible” thing too: migrating from a roughly 2000-line config to kickstart.nvim. It still took me more than two weeks.
Two weeks.
That’s when it hit me. Customization is amazing—until you’re customizing more than you’re creating.
Issue #2: AI and agents. Recently I have started working with agents for boilerplate, docs, and scaffolding. Quick note: I am not endorsing “vibe coding.” My workflow is more like pair-programming with an agent, reviewing everything, and fully owning the final code.
That review step is exactly where the problem showed up. Diffs matter more than ever when code arrives in chunks. And I’ll be honest: I hated every diff workflow I tried inside Neovim. Some were fine. None felt great. Nothing came close to the clarity and comfort of VS Code or Cursor-style diffs. It became harder than it should be to answer the basic questions: what changed, where did it change, and is this clean or is it slop? When code shows up as a patch, the diff view is the interface.
Issue #3: I am not RAM-poor anymore. A big reason I originally chose Vim was practical. My laptop was weak, and opening a few browser tabs and VS Code felt like a crime against physics. Vim let me work comfortably on cheap hardware.
Now I have a solid machine. So the value proposition shifted. I stopped caring about shaving a few milliseconds off editor startup time—especially when I was paying for it with days of configuration and debugging. Speed is great. But stability is what keeps you moving.
Issue #4: Collaboration. As I started coding more collaboratively with friends, researchers, and teams, Neovim became harder to justify. Even if I can make it work, the experience doesn’t translate well. A tool that only works flawlessly for me is not a great collaboration tool.
Issue #5: LSP and tooling. This one wore me down. LSP support in Neovim has improved a ton, but it still feels like I am one update away from something silently breaking. I bounce between Python and C++, and that’s where things get particularly annoying. Servers attach and don’t attach. Root detection quirks. Per-repo hacks. Formatter wars. “Works on this repo, breaks on that repo.” I did not want a setup I could fix. I wanted a setup that doesn’t need fixing. The best tooling is the kind you forget exists.
Issue #6: Debugging. I tried. I really did. DAP is impressive, and people have built great integrations, but for me the debugging experience never reached pleasant, let alone fast. In practice, I kept doing this: write code in Neovim, open VS Code to debug, then go back to Neovim. That was the final signal that something was off. If you keep reaching for another tool mid-task, your setup is already telling you the truth.
Underneath all of this was the real problem: cognitive overhead. Eventually I noticed I was spending brainpower operating the editor instead of solving the problem. Too many micro-decisions. Which keymap did I bind this to again? Which plugin owns this behavior? Why is this buffer doing something different? Is this my config, the project config, or an LSP quirk?
And that’s when the final line landed.
Sadly, at some point my editor stopped being a tool and started being a side project.
What did I switch to?
Not VS Code.
I respect VS Code a lot. It is (very!) powerful. The extension ecosystem is unmatched. But it also feels heavy, like a whole operating system dedicated to editing text. I wanted something minimal, fast, modern, solid out of the box, and extensible without becoming a part-time job.
So I tried a few options: Helix, Sublime Text, and finally Zed.
I’d actually tried Zed back when it initially released. I dropped it within 15 minutes because it felt too premature for my liking. But when I tried it again recently, it clicked immediately. It is fast. It is minimal. It feels thoughtfully designed. And the extension ecosystem is growing in a way that feels promising.
Most importantly, I spent over two weeks in it and for the first time did not feel the urge to crawl back to Neovim.
When you stop thinking about your editor, you start thinking with your editor.
So yeah. This is it.
Zed.
What I am doing now
I am actively building extensions for Zed and learning Rust along the way. It’s been genuinely fun--fun in the way Neovim config used to be, before it turned into maintenance.
If you want to check out my stuff, I recently published an extension called pathy: https://github.com/gokulp01/pathy. More than 2.5k people are actively using it check here.!