After around 20 years of using Vim, in December last year I switched to Zed as my main editor. Since some friends have asked me about the switch — “Now that you work at Zed, are you using Zed instead of Vim?” — I thought I’d write about it. You now know that I did switch, yes, so what’s left to talk about is the Why.
Before we do that, though, let me make something clear: I love Vim and Neovim. I’ve used Vim professionally, intensely, admiringly, loudly (guess that’s why people ask me whether I switched) for the last 13 years. I wrote a blog post about getting better at Vim 12 years ago and haven’t lost interest since. 5 years ago I switched to Neovim. Discovering what Neovim and its community had to offer brought me a lot of joy. I got my 10000 hours in Vim.
“Okay, we get it: you used to use Vim and you’re old” — that’s right. But I have to tell you all of this, since I wrote about testing before and put a paragraph with credentials in it and people still thought I just hadn’t written enough tests yet.
So, let me say it again, in a second paragraph: I love Vim, I know Vim, I’m very good at Vim. I can hear Drew Neil’s accent when I close my eyes. I know who my pope is. I remember when Derek said “Vim the Wonder Horse”. I’ve learned Vim tricks from Gary Bernhardt. I was there when TJ read the Vim manual. I live on home row. I once spent a Christmas vacation reading through the Best Vim Tips back when it was a single .txt
file on vim.org. Others leave :w
lying around, I twitch vapgq
when writing prose. Grown-ups I brought to tears with my use of Vim macros. It’s not clear whether it was awestruck-weeping or “just stop and do this by hand so we can move on”-weeping, but that shall not matter for this discussion.
What’s hopefully clear now is that I don’t switch editors lightly. Yet I did. Why?
Let’s start with the obvious, even though it’s more a requirement than a reason: Zed has a Vim mode. Without that, I wouldn’t have switched. But what’s intriguing to me, what lured me to Zed, is that its Vim mode is composable with the rest of Zed. And Zed has a lot of things I’ve always been curious about: multi-cursors, multi-selections, undo/redo stack for selections,… In Zed, I can use them all while also using Vim motions and operators. Imagine, as I did: the powers of a Vim mode combined with multi-cursors, multi-selections? That’s what got my curiosity. (Conversely, that’s also why I find the idea of just embedding Neovim into Zed a bit boring. In my eyes, it would make Zed just another GUI wrapper.)
Then there’s the multi-buffer. Oh, the multi-buffer. What a thing of beauty. In short: the multi-buffer allows you to view multiple excerpts from multiple buffers (files) in a single tab and (here’s the amazing part) edit them as if they were all in the same file! Yes! You can search for my_dumb_typo
or find all references of a variable or find all implementations of an interface and the results all get displayed in a multi-buffer and in the multi-buffer you can edit all of the excerpts! It’s glorious. Vim users: imagine if you could edit the quickfix list. Emacs users: yes, you already know this and call it Occur mode, thanks for tuning in.
Multi-cursor, multi-buffer, multi-selection, in combination with a Vim Mode — the powers seem endless. How could I not try that?
To linger on the practical matters before switching to the abstract: yes, I work at Zed, that’s also a reason for why I use it. Would I use it even if I didn’t work there? Yes, I did, before I joined Zed. Now I use Zed because I work on Zed, I work on Zed because I used Zed and found it very interesting. Pulling this apart into hypotheticals seems pointless. What I can tell you is that I wouldn’t work at Zed without using it — that seems hypothetically absurd to me. (Would I write this post if I didn’t work there? Yes, absolutely. Do I work there because I’m the type of guy who writes blog posts about switching editors?)
Now, as for the abstract that made me try it out and switch and makes me keep using it: the values behind Zed — the editor & the team — overlap with my own. Performance, simplicity, focus, aesthethics, love for the craft — that’s what I saw when I first used it and what resonated with me. Whether the founders would sign off on this list I’m not sure about, but does it matter? Sometimes you use software and it’s as if you’re walking past a bar, hear music coming out of it, and you immediately start to nod your hear — do you go in, or go home and listen to the same music you’ve always been listening to?
“But, Thorsten, values schmalues — what I want to know: does it support Vim macros, registers, marks, does it have jumplist? What about those rainbow parentheses?” — it supports some of these, will support a lot of the others, might never have 100% feature compatibility with Neovim. But, I have to admit, I don’t care that much. I need it to feel 90% Vimmy so I don’t curse, but what’s more important than getting the other 10% to me is that it’s something new.
I try out and sometimes even switch to new tools on a regular basis. Why? Because you’ll never know what you’ll find and very often there is something interesting to be learned, or to be adapted into your old workflow.
Here’s some examples. Until a few years ago I didn’t use any autocomplete, only Vim’s filename completion. Then I tried language servers and autocomplete and now I can’t live without it. Inlay hints — first time I saw them in VS Code, had to try it out when writing Rust, ended up writing Rust in VS Code for a few months purely because of inlay hints, then switched back to Neovim when inlay hints landed there, and now I’m convinced inlay hints are a game changer in developer tooling. This year I also ditched tmux from my regular setup, purely because I wanted to know what it’s like to use Ghostty without tmux in the middle, to get more performance out of it. Back in 2017, I flirted with Emacs and still think of the ideas I found on a regular basis.
So there you go, I switched because Zed has a Vim mode, there’s some very intriguing text editing mechanics in it, because its values resonate with, because I wanted to try something new.
Do I still use Vim? Yes, for some config files, or when I want to edit a directory using oil.nvim, but my main editor for programming is Zed. There’s a lot to learn.
One of the best things I love about vim/neovim is that migration to new machines or ssh server manipulations aren't hard.
But I can imagine that if Zed has vim mode. You can just use the same very vim motions on ssh sessions.
What do you think about Zed support in the future? Vim/Neovim is already rooted, hard, what do you think about Zed?
I really want a git panel in zed