My primary IDE at the moment is zed. It has a nice feature set which I feel captures the upsides of both VSCode and Vim in a single IDE. It seems to also have a sane take on AI in the development workflow.
Zed uses CRDTs: https://zed.dev/blog/crdts. I have used it for remote pairing between people in the USA and in Australia and it worked exactly as advertised. It is an amazing feature. I have tried pair programming across those two continents with classical approaches of controlling the other person's screen remotely and it is simply too laggy to be practical.
Zed has clean AI integrations that allow you to easily supply context to the LLMs including whole files and individual lines. I like this because it is promise free. It's not a UX of what could work one day, but a practical UX of what works today, where you supply all the context manually in the conversation you are having. The power of Zed's UX is that it makes that manual interactions easy with keybindings.
Preview tabs vs permanent tabs
https://zed.dev/docs/configuring-zed#preview-tabs
As of 2025-08-29 there is no keymap for making a preview tab a permanent tab. You have to interact with the tab to make it permanent. You can adjust settings so that opening files from certain sources will open a "permanent tab" instead of the default "preview tab". I find this behavior sometimes annoying when I'm searching through multiple files and later realizing the file I wanted to edit was a few files back and is now gone. But it's utility in preventing tab explosion is valuable, so I'm a bit conflicted as to what I want.
Settings
I am committing my settings to github: https://github.com/aegatlin/dotzed
Vim settings go in keymap.json. I was confused about this at first and thought they were supposed to be in settings.json next to the vim_mode: true setting.
Useful commands
Go to definition in split window
In Vim mode: ctrl-w g d (https://zed.dev/docs/vim#pane-management)
For type definition it is ctrl-w g D
In normal mode: alt f12 (https://zed.dev/docs/key-bindings#editor)
For type definition it is alt ctrl f12
Toggle zoom
shift + escape no matter what panel/pane you are in this will “zoom” it, which means make it full screen. It works with terminals, split window editors, project directory, etc. It is listed with the other global key-bindings
Code completions
https://zed.dev/docs/completions
There are two kinds of completions in zed:
- "Code completions", which are from LSPs, and are typically static code analysis based suggestions (though they can have ai-model-backend completion suggestions as well, in theory).
- "Edit completions", which come from a model, which by default is Zed's Zeta model. These are going to be AI completions, and have the associated pros and cons of that method.
The lines between many of these things are beginning to blur. For example, Zed now also has an inline assistant that would leverage your configured agent. This experience feels a bit like "edit completions" and a bit like the agent panel experience. And therefore has a bit of both in feel.
Inline Assistant
As of 2025.11.16 Inline Assistant does not work with External Agents, which is what Zed calls tools like Anthropics Claude Code or OpenAIs Codex. Quoting from the getting started section on inline agents:
Unlike the Agent Panel, though, the only exception at the moment is external agents. They currently can't be used for generating changes with the Inline Assistant.
You have to configure a non-external Agent to use this feature. For example, by using Zed's hosted models subscription, or by providing your own API key for a model provider, e.g., going to the Anthropic console and creating a zed-api-key and providing it to your zed settings.
Tasks
There are a variety of zed-provided shell variables for tasks.
https://zed.dev/docs/tasks#variables
There are a lot of capabilities here. One that I’ve never seen before is a concept of a one-shot task. You can just type a shell command and hit opt+enter to run it. It will show up in your task list for rerunning for the duration of your session. It works with the zed shell variables as well. For example, if you are working in Nodejs with a Jest test suite and you are working on a particular file that you don’t want as a permanent task you can create a oneshot task of npm run test —- $ZED_FILE and it will create a task for just that file. (Shell variable expansion does not let you reuse $ZED_FILE reactively, it will create a task for just that test file).