Trying out Zed after more than a decade of Vim/Neovim

I'm currently drafting this blog post in Zed. After using Vim/Neovim for more than 15 years, I recently decided to try out something new. I don't know if this little experiment will work, or if I'll run back to my trusty Neovim, but hey, what I do know is that I'd like to find out.

Why try something else?

Why though? If you've used a specific tool for that long, why (try to) switch to something else anyway? Everyone has their own reasons. I have two.

1. The desire to use something that just works

Lately, I've been drifting towards things that "just work".

I love (Neo)Vim. Like I wrote earlier, it's been my primary editor for the past 15 years. What I don't love is all the configuration that goes into it before I can use it to start writing code.

When I first started using Vim (in 2009!), my configuration was a tiny .vimrc file that was handed over to me by my internship supervisor at that time. I had no idea what it did, but it worked. Over time, as I felt the need to customize things, my .vimrc started accumulating increasingly more code copied from StackOverflow that I didn't understand.

At some point Neovim came out, and with it, the ability to configure things using Lua. This was a huge step up, because I could at least understand what I was configuring.

Either way, it's still configuration. What changed was just how that configuration was done. The combination of configuring the base editor and installing a set of plugins (and making sure that they play nice with each other) isn't really something that I would like to spend my time on, going forward.

One recent example that highlights this problem: my workflow consists of switching back and forth between a terminal window and an editor window. At any time, I have multiple projects open in both. On macOS, it's been difficult to find a solution that "just works". The most popular Neovim GUI clients on macOS include Vimr and Neovide, which are both excellent projects. Neovide though, does not support multiple windows, which is integral to my workflow and hence requires me to implement workarounds, which actually broke last week after I ran :PackerUpdate. And while Vimr does support multiple windows, it is not able to render icons in nvim-tree, which is less than ideal. 🤷🏻‍♂️

2. Deeper and native LLM integration

LLMs are happening, whether we like it or not. And no, the fact that they aren't 100% correct all the time is not a reason to discard them entirely. I understand why some people don't want to use them. And I respect that. I personally find them useful and would like to integrate them more into my daily workflow.

The Neovim ecosystem has a bunch of plugins for using LLMs. But as I wrote in the previous section, I'd like to avoid plugins when possible. Installing plugins means updating them, which inevitably breaks things.

One example where I find LLMs useful when coding is handling boilerplate stuff. In my current Neovim setup, I have the the Codeium extension installed, which offers code suggestions that are like an autocomplete on steroids. Often, I can write a function name and what parameters it's expecting, and the LLM writes out the function for me. This is particularly helpful when writing small functions or test cases.

I'd like to be able to do more of such things in my editor. I'm not entirely sold on the idea of agentic editors, as I'd like to keep at least some agency over the code that's going in, but that's a different topic.

Another example of where I find LLMs useful: I'm not a native English speaker and often struggle to find the right sentence framing that is both concise and catchy. LLMs are excellent at this! I can scribble my initial thoughts, throw it at an LLM and ask it to reframe the whole thing, which is great!

Generally, it feels like the way we're writing code is changing with the introduction of this extremely powerful tool, and I'd like to move with the times.

Why Zed?

So yeah, those are the two reasons why I've been looking to try out something else lately. What made me go for Zed?

1. Vim mode

Yep, that's literally the first reason. After using Vim for 15 years, my fingers have built up enough muscle memory that not using Vim keybindings when writing code is downright impossible.

Zed's Vim mode is surprisingly solid! So far, I feel right at home. Almost all Vim keybindings that I'm used to work just as expected. The one or two bindings that don't work, are something that I can make my peace with and retrain my fingers on. Everything else works excellent. It also looks like they're doubling down on their Vim mode support in 2025, which is a great sign!

2. It just works

When you fire up Zed, the editor is fully functional without having to write a single line of configuration. That's awesome. The editor may prompt you every now and then to install support for specific languages. But that's usually just one button click.

3. JSON Less configuration

Update: this one started a bit of controversy on internet water coolers so I'll elaborate a little more. 🙃

Lua is great, but one JSON file is even better. Zed uses JSON as the configuration syntax and so far it feels a lot simpler than what I've worked with so far.

The underlying sentiment here is that I'm looking to have less configuration. I don't really care whether the format is JSON, or YAML, or TOML, or whatever else. I'm actively trying to do less dynamic things in my configuration, so I'm beginning to appreciate the fact that the text editor gives me less buttons to play with.

4. Configuration autocomplete

I had no idea I needed this until I had it!

While editing the Zed configuration file, I found it really helpful how the editor suggests configuration keys and their potential values. This feature felt really thoughtful when I first saw it and I could imagine that it goes a long way in getting new users up to speed quicker.

5. Native LLM integration

I know some people have been turned off by this, but I actually like this feature.

Zed has a feature called Assistant, which is a tool to, well, assist you, using a large language model of your choice. A few popular LLM providers are supported. Once set up, you can open up the Assistant panel to work together with the language model you've chosen. For instance, it's pretty easy to type in questions in the panel window and then paste text from your open file buffers into it to give the LLM more context. There's a lot more to this feature that I haven't used yet, but I'll probably get to it the more I use it.

Overall, the integration feels very native and very useful.

6. Fast!

Last but definitely not the least is speed! Zed is very fast. Everything feels very snappy, and it's clear that the team has put a lot of effort into making everything fast.

Conclusion

It's only been a day since I really started using Zed instead of Neovim as my daily driver. And so far the experience has been quite nice.

Like I wrote earlier, this is an experiment. We'll see how things turn out. That being said though, the first impression looks very good.