Zed, Vim, And The Problem Of Editors
Based on The PrimeTime's video on YouTube. If you like this content, support the original creators by watching, liking and subscribing to their content.
Zed’s Vim mode targets practical compatibility while respecting Zed’s multiplayer-first architecture, so it doesn’t aim for full Neovim parity.
Briefing
Zed’s Vim mode is being built not as a compatibility layer for Neovim, but as a feature set that fits Zed’s own architecture—especially its multiplayer-first data model. Thorston, now at Zed after work at Sourcegraph, describes how the editor’s core concepts (buffers, CRDTs, and rendering loops) force trade-offs: some Vim behaviors can be approximated, but others—like Vim’s hidden buffers, command-line piping, and keystroke-level macros—don’t map cleanly onto Zed’s action/binding system.
The practical result is a “merge what matters” approach. Zed’s Vim mode is implemented as a single Rust crate, and development has focused on closing the gaps users notice most: motions that take counts (for example, variants of “z z” behavior), dot-repeat support, visual-mode indentation edge cases, and missing registers/marks. The team also uses Neovim’s headless mode as a reference for golden tests: simulated keystrokes run in Neovim to produce expected cursor/selection outcomes, then the same keystrokes are replayed in Zed and outputs are compared. That testing strategy is meant to keep the experience close where it counts, even while the underlying mechanics differ.
Beyond Vim compatibility, the conversation connects editor design to the realities of developer tooling at scale. Thorston frames developer tools as a place where engineering can directly move the needle—unlike many B2C products where marketing can dominate. He also emphasizes that “APIs” in developer tools aren’t just network interfaces; they include CLI flags, settings schemas, and editor configuration formats. In that mindset, editor features become contracts with strong user opinions, which explains why text editors generate intense loyalty and backlash when behavior changes.
Linux support becomes another lens on the same theme: the experience is “pretty good” on Wayland, but X11 performance work is tricky and may require changes to Zed’s event loop. The Linux port also faces fragmentation—different windowing stacks, legacy X11 layers, and desktop environments with their own rules for window decorations. Collaboration features are still incomplete on Linux, with audio/video and screen-sharing called out as especially hard.
Finally, the discussion highlights why editor features behave like a “fat tail”: small capabilities can be mission-critical for specific users. A ticket from GitHub cofounder Scott Shone about Vim replace modes (lowercase/uppercase “r”) drew a $500 bounty after community interest proved it wasn’t niche. Similar stories come up around built-in Git integration versus terminal workflows, showing that even when a feature is optional, enough users depend on it that missing it can feel like a deal-breaker.
Taken together, the interview paints editor development as a balancing act between architectural correctness, compatibility expectations, and platform constraints—where the hardest problems aren’t just rendering speed or keybindings, but the long list of “small” behaviors that determine whether a community feels at home or angry.
Cornell Notes
Zed’s Vim mode is built to fit Zed’s multiplayer-first architecture, so it aims for practical closeness rather than 100% Neovim compatibility. Thorston describes a Rust-based Vim mode crate, ongoing work to add missing motions, counts, dot-repeat, registers, and visual-mode correctness, and a testing approach that uses Neovim headless golden tests to compare cursor/selection results. Some Vim concepts don’t translate well—hidden buffers, command-line piping, and true keystroke macros—because Zed’s input becomes actions/bindings rather than raw keystrokes. The broader theme is that developer tools behave like contracts: settings schemas, CLI flags, and editor behaviors carry strong user opinions, and small feature gaps can trigger outsized backlash. Linux support adds another layer of complexity due to Wayland/X11 differences and desktop-environment constraints.
Why does Zed’s Vim mode avoid “drop-in Neovim compatibility,” and what architectural mismatch drives that decision?
Which Vim behaviors are being prioritized in Zed’s Vim mode, and how does the team verify correctness?
What are examples of Vim features that don’t map cleanly onto Zed’s model?
How does Linux fragmentation affect Zed’s development priorities?
Why do “small” editor features create outsized community reactions?
Review Questions
- Which parts of Vim’s behavior are easiest to replicate in Zed’s Vim mode, and which are fundamentally constrained by Zed’s multiplayer/CRDT architecture?
- How do Neovim headless golden tests help Zed’s Vim mode development, and what kinds of outputs are compared?
- What Linux-specific factors (Wayland vs X11, window decorations, event loops, collaboration) most influence Zed’s release priorities?
Key Points
- 1
Zed’s Vim mode targets practical compatibility while respecting Zed’s multiplayer-first architecture, so it doesn’t aim for full Neovim parity.
- 2
Zed’s Vim mode is implemented as a single Rust crate, with ongoing work on motions, counts, dot-repeat, and visual-mode correctness.
- 3
Neovim headless golden tests are used to validate Vim-mode behavior by comparing cursor/selection outcomes after simulated keystrokes.
- 4
Some Vim concepts—hidden buffers, command-line piping, and keystroke-level macros—don’t translate cleanly because Zed’s UI and input pipeline differ.
- 5
Linux support is constrained by Wayland/X11 differences, desktop-environment window decoration rules, and performance-sensitive event-loop decisions.
- 6
Editor features behave like contracts with users: even niche capabilities can become high-priority when enough people depend on them (e.g., Vim replace-mode “r” with a $500 bounty).