Zed’s Vim mode continues to improve! My newest favorite feature is the !
operator, which was the "last holdout" for common Vim operators:
But we’ve also been making progress on fleshing out the command palette with things like g//
and v//
to execute a command on matching (or non-matching) lines.
The broader community has also been working on pulling in top Vim plugins. We have versions of vim-surround, sneak, and as of recently, tree-sitter text objects:
All in all, if you use Vim today, the chances are that most of what you want to do on a daily basis in the editor will work in Zed exactly as it does in Vim.
So now what?
There are three areas of focus I’d like to push on in 2025 for Vim in Zed:
- Building out the non-editor user experience
- Raising the bar on matching Vim edge-case-for-edge-case.
- Creating a new, better, multi-cursor Vim integration
Non-editor user experience
Although Vim seems to have “no UI” this is a sleight of hand. After :
you’re in ex mode, which is full of features that make it work well. In particular, I want to bring to Zed:
- Filename completion in the command palette
:e README.md
, or:w README.md.latest
for example - Command history, so you can fix a
g//
without typing it out again :norm
to run a sequence of keystrokes (and a few other missing commands)
There are also other Vim UI’s to bring into Zed:
:registers
to see your registers.:marks
similarly.
Interestingly both registers and marks are more powerful in Vim than Zed today because they persist state to disk across a restart. We need to build that too.
Finally Zed has significant surface area that Vim does not have, and I'd like them to feel Vim-native:
- Keyboard shortcuts for collaboration features like ‘follow next person’, and a keyboard driven way to join and leave calls, mute/share etc.
- Better shortcuts for the AI edit predictor, and handling in normal mode. Similarly for the inline assistant, which also tends to bug out in Vim mode today.
- Bringing more netrw like bindings to the project panel
- Tighter integration with the upcoming Git panel
Conformance
People who switch to Zed from Vim are attracted by the “just works by default” aspect of Zed: language servers just work, and the advanced features (AI, collaboration). But, nothing is more frustrating than a Vim mode that doesn’t work exactly like Vim. We get a lot of VS Code Vim extension refugees, and the number one complaint is that “it just didn’t feel right”.
Zed is already much closer to Vim. We have extensive "side-by-side" testing
where we run headless Neovim to ensure our keyboard shortcuts do exactly the
same thing. That said, there's always more to do, both to add the remaining
minor motions zL
/zH
come to mind, and fix edge cases in things like d]}
.
A truly great multi-cursor experience
Zed has multi-cursor, and Zed’s Vim mode works “as you’d expect” with multiple cursors for the most part. The problem I'd like to solve is two-fold:
- Tidying up the bindings so there's a coherent feature set around Vim with multi-cursor.
- In particular making sure you can easily rotate into multi-cursor as though it were another mode.
- Adding to Zed support for moving just one of your selections in case you make a mistake selecting.
There are a few editors that have prior art here, particularly Kakoune and Helix; but also Vim plugins that I want to get inspiration from.
Let's get to it
If you'd like to help work on any of this, you can book time to pair with me. Also feel free to peruse the list in the Vim channel notes and pick up things that sound interesting to you. While I am happy to accept PRs out of the blue, I always prefer talking things through first.
If there's something I'm missing, or not prioritizing, please add it to the issue tracker, or upvote things that are already there.