← Back to Blog

Vim Roadmap 2025

January 22nd, 2025


Zed’s Vim mode continues to improve! My newest favorite feature is the ! operator, which was the "last holdout" for common Vim operators:

The ! operator in action.

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.

Demo of g// in the command palette.

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:

Showing off "change within function".

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:

  1. Building out the non-editor user experience
  2. Raising the bar on matching Vim edge-case-for-edge-case.
  3. 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.