> all the configuration that goes into it before I can use it to start writing code.
Yes, this is awful and something the default should've changed years ago instead of continuing this massive collective time waste.
But presumably after 15 years you've configured almost everything you need? At least to the point of matching a static config file?
> Lua is great, but one JSON file is even better.
No way, it's a strict downgrade, you can have a simple lua table exactly matching json things, but then should you decide to do anything dynamic/complicated (which at one point even included formatting as Zed broke your config format on changes), you're stuck with json with no way out
> Installing plugins means updating them, which inevitably breaks things.
No it doesn't, just pin the version you the one that works for you and ignore the future? Or do you need that extra functionality from the updates? But then does Zed without a plugin even have this functionality?
But also Zed does plan to have plugins, so this won't be different?
I think I'm actively trying to not do anything dynamic/complicated. :)
If Zed breaks things too much in the future (to the point that its JSON config doesn't let me do something I need to get my work done) I'll probably go back to using Neovim. We'll see how it plays out over time. For now I'm enjoying having less configuration knobs.
> Yes, this is awful and something the default should've changed
> years ago instead of continuing this massive collective time waste.
This doesn't seem feasible, because that would go against the culture and long-term practice of doing things. That's why approach of "starting from scratch and doing it right without the baggage" like Helix's works so much better.
i don't think vim is that bad out of the box. when i ssh into a box and need to get work done, i can install it and use sane defaults with pretty high productivity.
i'm used to a plugin- and config-light setup on my personal systems, with most of the customization being stuff like latex compilation and preview from a keybind rather than major changes to default behavior, but the whole "vim needs a bazillion lines of config!" thing isn't really true. some people like to spend a week bikeshedding it but it's by no means necessary. i've had the same vimrc for years and years and basically never need to change it.
Neovim is fine and just as easy nowadays -- if you can `git clone` two repos (in my case: AstroNvim + my config) and just start `nvim` then you can go fill a glass of water and it will be 80% done by the time you sit back on your computer.
But I agree with you and the OP that the defaults with zero configuration do matter and that I wish we had that in every editor.
Yeah that single line makes me doubt the whole post, how can a format without comments be an upgrade to any configuration file is beyond me. My customized configs were full of ‘this was broken on this day by something else, link to obscure thread’ before I accepted the way of default.
I wonder if we can come up with an agreed name for almost json stuff... Maybe json+ and we can tac-on additional characters for what's added. json+c (plus comments), json+t (plus trailing commas), json+tc or json +ct (plus comments and trailing commas), and so on
> my workflow consists of switching back and forth between a terminal window and an editor window.
Same! I run neovim in tmux together with stuff I hack on. I switch beteen tmux windows with shift-arrows and it works so well. I run this full screen in Ghostty. No distractions.
I try Zed and VSCode and I always come back to this setup. It works so well for me personally.
> I try Zed and VSCode and I always come back to this setup.
I have Ctrl+` set to switch focus between the editor and the terminal panes in VSCode, so I can toggle between them pretty easily as this is also my workflow
If anyone's wondering, here's what I have in my keybindings.json
ctr+` is the default behavior on VS Code I use it all the time and I didn’t set it up and I’m sure as hell neither did my co workers.
It’s a nice short cut if you have a keyboard with backtick to the left of 1 in the numeral row. If you’re from a country where keyboards have a different key there, I would recommend setting up a short cut manually.
Nope. It minimizes the terminal by default, at least on macOS. These keybinds leave the terminal / lower bar open and just shift focus back to the editor.
What editor state are you losing when you leave vim?
I run a pretty light vanilla vimrc (60 lines maybe) and with two lines you can enable vim undofiles and returning the cursor to the last location upom reopening a file. For me, quitting vim is functionally equivalent to ^Z?
You may lose LSP state like rust-analyzer's which takes a while to restore. You may lose opened buffers and positions within them (unless you have some session restore logic which may also take time), window layout, copy buffers, edit history and lots of other state.
Retaining positions, buffers, and edit history between sessions is all straightforward in vanilla vim though. Unless you run an autolinter or formatter that edits your target file and wipes the history.
I don't use tabs, sometimes I use split windows (usually only when vim-diffing), mostly I use multiple terminal windows in a tiling WM. I do use multiple buffers but I usually don't care about editing more than one or two at a time and it's easy to re-open these whenever I need to.
That's true for me too but usually my tabs and windows are managed one level higher, by the terminal emulator, or I'm opening vim with -o/-O to open a split window directly.
I’ve definitely done the ^Z thing. The catch is to remember you did it if you get distracted in the terminal. Nothing like finding some vim job in the background and you can’t remember what it was.
For me it only works because I never reuse a single terminal for unrelated things. Additionally, I have my virtual desktops grid set up so that different types of tasks are always in certain places, so if the switcher shows a terminal somewhere, I know roughly what it's for even without going to look at it. So I can't "lose" a terminal.
So it's fine for X11 terminals, but not for /dev/tty2
Don't forget you can just :!some-shell-command though - not just in vim but in lots of programs even.
Another (neo)vim+tmuxer chiming in. One major missing feature (compared to vscode) is opening file links from the terminal back in vim. It was such a major pain to me, so I ended up writing a tmux plugin to solve it. I thought you might find it useful - https://github.com/artemave/tmux_super_fingers
Yeah the tmux / vim combo is so hard for me to beat with other editors still. I used Zed exclusively last month thinking the LLM integrations would be a compelling enough reason to finally switch. Like the post author, I'm a little fatigued with config / plugin churn since I switch languages frequently and it always takes some customizing to make vim work well when I do that.
As the author describes though, I found myself copy-pasting a lot between LLM chat and editing buffers. In tmux, I have a really simple function that copies select panes (using tmux capture-pane) into my prompt, or I can give it full files for context. Most of the time though, I can do something like `llm -t 0 -t 1 'what is this libSSL error indicating? here's my code', where -t 0 gives it my vim pane and -t 1 gives it the terminal I'm running things in. I've been surprised that this somewhat rudimentary approach has felt far more effective than the more sophisticated editors I've been trying.
Is this just me? Does it seem to others that the LLM-enabled editors coming out these days still require a lot of copy-pasting of context that can be easily provided with just a dump of tmux output?
Everything-is-just-text might be crude but dang does it make quick and dirty LLM integrations a snap!
I use tmux and neovim along with the copilot plugin[0]. I prefer it over the VSCode copilot integration, to me it feels less obtrusive and out of the way, which is what I want. You're also not dealing with API costs since it uses the regular Copilot subscription.
Zed is the only GUI editor I've used as my daily driver after 15+ years of development (hardcore vim fan). Vim Mode is wonderful, the terminal pane works well, UI is butter-smooth, LSP integration beats VS Code's IMHO, and the LLM-powered autocomplete works well (haven't tried chat/generation). Nice themes, too.
The lack of debugger support will put some off, but I bet they'll get to it someday. It's already progressed so much in the four or five months I've used it (esp. Vim Mode).
Zed seems nice, but the fact it wants you to sign in, wants you to connect to Github, wants you to sign a CLA, etc..., isn't what I want in an editor. I'm perfectly content with Neovim/Lazyvim, especially the fact that you definitely know there won't ever be a rug pull or weird monetisation scheme.
Edit - also, as far as config goes, "distros" solve this. LazyVim is everything I want in an editor and more, with zero config. Installing LSPs and plugins is super easy, arguably even easier than with editors like VSCode or Zed.
What I find strange about an open source product funded by VC money is that all of the people are helping make it a better editor and yet when they eventually exit none of the money will go to them.
Compare that to vim where it's truly an open source product.
I think you are not very accurate about “open source product” vs something like “community led project”.
People being able to adapt their software to their own needs by making changes to the code is exactly what open source is about. This is good.
What is a problem though, is to have the code merged in the main repository requires you to gift them the rights to your code (not just license it).
They are also not very clear about this in the summary of their CLA: “You're giving Zed permission to use and share your contributions (like original works or modifications).” which could be misunderstood to just be a usual open source licensing agreement, but seems to be complete handover of copyright: https://zed.dev/cla
This is not good, and something people should be more aware of when contributing.
No, I don't mean it from like a licensing or legal perspective at all. I'm thinking more of vibes and ethos.
There is something strange where you are sort of making your product better through open source contributions and yet all of the capital gains from your company's eventual sale will only go to you.
There is something really weird and nasty about that.
> requires you to gift them the rights to your code (not just license it).
The legally binding section only talks about giving them an infinite free license to it. It does not say you hand over your copyright, so the summary seems correct.
I still don't think you should sign it. The editor code seems to be variously under GPL, AGPL and Apache 2.0, all of which would be fine without one.
If I want a thing badly enough to make it happen for myself and others such that I make a code change, that's orthogonal to whatever others are paying each other for around that code. So long as I don't later lose access to that code, why care? I'm all for avoiding contributing to ventures that are harmful in some way, but I don't think somebody making money as a side effect is harmful.
The alternative would be to presume that I have some kind of ownership over it by having contributed to it--and I'm a bit allergic to the idea that code can be owned.
I've recently switched from SublimeText to Zed and I like it so far, mainly because it's noticeably faster at all UI touch points (typing, searching, pane switching). I mainly use it to work on a Rails codebase. I set up a bunch of snippets to have the same keyboard shortcuts offered by Sublime to insert ERB instructions. I managed to get rubocop to perform in-editor validations, same for eslint however "format on save" with eslint continues to fail (it either writes an empty file or it ignores my eslint config and falls back to its internal settings). I haven't used its code completion features since my use of AI to assist with coding happens outside of an IDE (yes, I will try to change that).
I will never understand how you go back from a very customized editor setup to the one with "reasonable defaults with little to no things to configure".
>I will never understand how you go back from a very customized editor setup
because when the very customized setup inevitably breaks the amount of headache you have is roughly proportionate to the amount of customization, whereas software with strong defaults tends to deal with that for you.
This is particularly the case with neovim which, in almost deliberate defiance of any systems thinking, just tends to consist of a few dozen moving parts loosely tied together and you have to sort of pray that updating some doesn't just break things. Paraphrasing Russ Ackhoff, if you take the best part of every car and put it together you don't get the best car, you get something that doesn't even drive, this is how I've felt more than once with very bespoke editor setups
Haha this is so true. I stopped upgrading neovim when something little broke and I couldn't work out how to fix it an hour or so. It was something stupid like the column bar not having the right colour anymore.
Yeah, they changed the default colorscheme in neovim at some point in the last year or so. I have an extremely minimal
config and don't even use syntax highlighting or tab completions but I could not get it to render the way it used to. I wasted at least 30 minutes on this for absolutely no good reason. So I git bisected, made my own build (which took maybe 10-15 minutes) and will likely never upgrade neovim again.
I see people mentioning neovim "breaking" and to this day I have no idea what everyone is talking about. I have a very customized neovim setup, update almost every day, and quite literally have never experienced a single thing breaking.
I agree. Cramming a dozen of low quality plugins without understanding how they operate and hoping updating won't break things is not a great way to go.
I understand "just make it work" mentality, but it might be useful to have deeper understanding of a tool you use several hours everyday.
Back in the '90s I would customize my development environment to within an inch of its life, but after going from one machine to the next, one toolchain to the next, one operating system to the next, year after year, culminating in one ridiculous six-month period when I had to pave my dev machine and reinstall everything from scratch every two weeks (yes, this was stupid; yes, I knew it was stupid at the time; no, I had no way out of it, not if I wanted to keep my job) - I learned that adapting myself to the defaults was a lot less work than adapting the settings to me.
Or, to put it another way: every step you take away from the mainstream has a cost, so you had better know how much you are willing to pay and budget your quirks accordingly.
Or you just had to structure your knowledge bases and settings properly. I can restore dev-part of my pc anytime by installing git and making a few clones. Going to another machine is literally a matter of pasting gitlab credentials and init scripts into a terminal. I can even replay things if they have to repeat in a project because I save all the steps I take into a project/job-wise obtf.txt. Working in a non-automated non-repeatable way is so self-inflicted. It’s akin to not having a car because it has a cost.
How is the work of copying an editor config/plugin folder with a script every two weeks for six months worse than using the bad suboptimal defaults every day?
> every step you take away from the mainstream has a cost
If it can open text files and has a cursor im good. Irl i dont grow attached to environments either. Its just to expensive when they vanish. Its just people now :)
> I will never understand how you go back from a very customized editor setup to the one with "reasonable defaults with little to no things to configure".
That's one of the reasons why I chose Vim over Emacs after switching back and forth for a while.
I do prefer the design of Emacs because I prefer having full control over my environment - I even coded more than a couple of tiny, application-specific editors - but sometimes I have better things to do than e.g. reading docs or searching for a plugin/extension mod that does what I need, or do it myself; sometimes I am a mere luser who want things to "just work" out-of-the-box.
Zed has the least uncanny valley of any vim emulation that I've tried.
Switching is not feasible for me until they get mini.surround[0] and Flash.nvim[1], particularly Flash's treesitter mode (see screenshot of [1] to get an idea).
They work particularly well together to select semantically meaningful chunks of code and add/remove/change surrounding parens/braces/curlies/etc.
I think I understand the use case for a smart surround plugin like this; I watched the demo video and saw and lot of picking-and-pulling text.
What I don’t understand is the development workflow that includes so much text manipulation. If you’re writing new code, there’s nothing to manipulate. If you’re refactoring existing code, wouldn’t you want the support typical AST-based refactoring tools provide? Where’s the sweet spot where shuffling strings around makes sense?
For me (maintainer of Zed's vim mode) it comes down to a few things:
1. LSPs differ per-language, and so I'm never sure whether I'll get lucky today or not. It's more reliable for small changes to talk about them in terms of the text.
2. LSPs are also quite slow. For example in Zed I can do a quick local rename with `ga` to multi-cursor onto matching words and then `s new_name` to change it. (For larger or cross-file renames I still use the LSP).
3. I err as a human continually, for example in Rust a string is `"a"` and a char is `'a'`. It's easy for my javascript addled brain to use the wrong quotes. I don't know of any LSP operation that does "convert string literal into char literal" (or vice versa), but in vim, it's easy.
We are slowly pulling in support for various vim plugins; but the tail is long and I am not likely to build a vim-compatible Lua (or VimScript :D) API any time soon.
For example, most of vim-surround already works so you could get the most used parts of mini.surround to work with just a few keybindings `"s a":["vim::PushOperator", { "AddSurrounds": {} }]`, but rebuilding every plugin is a labor of love :D.
I think you’re just highlighting the different preferences people have between a text editor and an IDE. Obviously the line between the two is very blurry. I much prefer being able to efficiently edit text myself rather than relying on refactoring tools.
I use cursor and vim now. I have been on vim for 15+ years. Are there LLM extensions that make vim work like all these new AI editors? I would prefer to stay in 100% vim world, but the productivity benefits from LLMs with composer mode and context is so powerful.
dingllm is very straightforward, you submit your entire selection/buffer and it streams out to the current position. mine is a bit more complex with configurations, context management and so on.
The thing I always tell people is just roll your own. The docs are there, the LLM is there, use them. At the end of the day it's just an http call against text from your buffer to put text in a buffer.
I tried and I really liked so I considered a switch but:
- It's missing debugging capabilities. They have it in their pipeline, but, as it stands, not for production use if you do not want to develop with debug prints all the time.
- The font rendering still needs some polishing. On a non retina display using a dark mode in mac the fonts are pretty blurry in comparison to vscode, and I had to use a medium weight for the editor font for improved readability.
I've been daily driving Zed on Windows (building from source) for maybe 2 months now and I'm pretty happy. It's a nice middle-ground between editing single files in NeoVim and bringing up a JetBrains IDE for an incredibly complex project.
I think the only thing that is really outstanding for Windows is SSH support.
Everything largely "just works" and my experience getting a plugin with syntax highlighting working and merged for a DSL I maintain was very smooth.
Cursor’s composer agent is so slick. I tried Zed out for a few minutes this evening, and in addition to what you said, I was surprised that there wasn’t an option to bring my own tab completion server.
Zed felt very nice, definitely reminded me of the good old days of Sublime. With literally the two features mentioned above, I think I would switch… but it’s easy to say until it happens for sure.
I’ve been using Sublime Text for more than a decade and I gave Zed a try recently. I don’t have good reasons like the author, but I kinda wanted to see what the hype was about.
I really liked everything about it including the much better LSP support and the base key map for Sublime Text was very close so I felt at home quickly.
Then I tried actually writing code in my usual workflow and this is where things started to fall apart. I’ve been writing in Ruby for almost 10 years now and when I type things like `def<tab>` I’m used to Sublime filling in the snippet and allowing me to quickly enter and tab through the components. Same for a bunch of really common Ruby concepts like blocks. I found this to be very limited and even though I created custom snippets they never would render with the correct indentation. I think the Ruby language extension just needs some additional work and probably doesn’t get much attention. For me I didn’t have time to figure it out and contribute so I went back to Sublime Text.
I will definitely continue to play with Zed and see if it gets better because of the native AI integration. I’m not an AI fanboi and I usually avoid it, but being able to supply the open and existing files as context when asking the assistant to generate things like tests performed much better with context than without and were much closer to how we write and format tests.
I echo this sentiment. Also, a long time rubyist. I pretty much go between neovim or Sublime everything else has felt off for Ruby development. I use vintage (vim) mode for Sublime and it’s the sweet spot. I get all the motions, but also some -non vim actions that I appreciate. This might feel like uncanny valley, but it works.
I just can't see myself ever leaving Sublime. VS Code is good, but uses way too many resources without really delivering commensurate functionality compared to Sublime. I thought Zed might do it, but their main focus seems to be trying to integrate LLMs which are a productivity drain with how inconsistent they are. So if anything that's a reason to stay away, not to use it. Thus far Sublime is the only editor which is just focusing on doing a good job being an editor and not using hella resources.
I’ve fully migrated from Sublime Text to Zed, but in these areas both are lacking things the other has.
Sublime has great language support out of the box but poor LSP support (basically outsourcing it to a user plugin instead of having a native integration).
Zed has great LSP support but ”poor” language integration (also outsourcing the language plugins to the community, which makes the vary in quality and feature set).
But Zed has great AI integration which Sublime completely lacks, if you’re into that.
This is close to my experience. Also long-time Sublime user, almost always writing Ruby.
I don't know if I'm an AI fanboi or not, but for generating things like factorygirl definitions and simple rspec unit tests, GPT is seriously good (in the sense that it saves me tedious work, not that it is particularly fantastic).
I gave Zed a try, and it seems great! The only problem is that I can't seem to get GPU acceleration working on my laptop (Thinkpad x220 running Debian), which negates the performance benefit Zed has over other editors. I know I'm in a slim minority of people with this problem, but I can't be alone. Ordinarily I use vscode on my desktop in my dayjob, and vim on my Thinkpad if I'm on the move. Using vim over vscode extends the battery life by hours. Thinking out loud: How much will using a laptop's GPU for rendering impact the battery usage? Often I need to be able to get at least a few hours usage out of my laptop between charges when traveling.
>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.
this resonates with me. i've spent so much time configuring neovim in the terminal (kitty) and i've never had everything work 100% of the time. simple things just like seeing an entire typescript error are challenging to get working. those errors just continue on one line outside of the screen.
with LLM's the tradeoff tipped in the favor of cursor with the neovim extension.
> 2. It just works
so i switched to cursor last week from neovim in the terminal and this is how i feel. but, i'm not going to invest more time to check out Zed now that i just got cursor set up the way i like it.
but it's great to see all the progress in IDE's lately.
I wanted to like Zed but tying buffers to tabs is a deal breaker for me. They have really good vim motion support but don't let you view any buffer in any pane.
Tried for a long while to use Zed. It was great and I loved it - and maybe I could have switched to a GUI editor for real though for the first time in my life.
But man. File trees and tabs are the worst DX I can possibly imagine. Try as I might, I just could not get used to the tab and tree workflow. Creating new files killed me. Hiding the tab didn’t really help because the editor assumes you’re using tabs and at that point it doesn’t feel like buffers, it feels like tabs with the tab bar hidden (go figure).
I’m not even a buffer power users, but I think the default assumption of buffers over tabs, and explore over a file tree, led to 1000 other great decisions that make vim vim.
I think unless the zed core team really tried to move away from tabs and trees (and I don’t think they would nor should) they’ll fail to capture a meaningful share of vim users
As another neovim/vim expat using VSCode these days (because I got tired of fixing configuration), this is also my number one complaint. I want to be able to view any file in any split. Honestly, I wish my whole window manager worked this way (stacking WMs get close). And my browser - why can't I display any "tab" in any window with a couple of key strokes? It drives me batty how inflexible the split/buffer/pane/window model is outside of vim and emacs land. I don't want tab groups; I don't want independent windows; I don't want VSCode editor groups that are pita to close. For the love pixels, I want to make the content I care about appear in the window I have in front of me, where those windows are arranged to consume my monitor's space without overlap. /soapbox-dismount.
Not that guy but how about viewing two parts of the same file side by side, organizing them vertically or horizontally as needed, opening like a hundred files and cycling through them in a sane fashion, probably dealing with macros. Tabs get very annoying if you have too many of them, and buffers are a good solution to that problem.
Made the same reply elsewhere. You can do everything he desires and stick with Neovim. He just pretends he never heard of Astro or Lazy. He uses Packer though, so he might not keep up with the state of the ecosystem or something. I caught myself wondering if this was marketing.
Probably JetBrains is best in class. How much config you need in Zed to get productive with e.g. PHP dev vs install PhpStorm?
I think there is a spectrum of tools where Neovim requires more customization and JetBrains is the most Just-Works. Everything else in between doesn't just work and requires customization in their opinionated way.
> Why Zed?
> 1. Vim mode
Out of all non-vim editors with Vim mode JetBrains is again has the best integration via IdeaVim.
> 2. It just works
Do I need to install extension and configure them?
> 3. JSON Configuration
Comparing JSON vs Lua Table I can't see any benefits. Most configs in Neovim I just copy pasted from the GitHub repo and changed couple things.
> 4. Configuration autocomplete
If you need a good autocomplete for a config file you probably spending too much time on your config.
I think Zed is very close to being amazing, but it might be premature. Just recently I think they fixed a bug where undo broke somehow when you pasted something? I could never quite reproduce it, but I ran into it a couple times a week. You still can't specify indentation settings per-file, which I consider essential. For some reason the GPU acceleration is very fast on computers with good hardware, but very slow on bad hardware. I get that it's current year, but a text editor should run well on a T480 imho. Frequently Zed just starts up and shows some of the other windows. I.e. it just renders like another existing Firefox window and I can't do anything to fix it, but restart. Yesterday multiple Zed windows all just showed my login screen (when I was already logged in). And a very recent problem is that Zed will just not format certain files. I think they switched to formatting via the language server by default? It will just format some files like it's supposed to and other (seemingly randomly chosen) files will just result in an error that tells me it could not format the file.
I have been using Zed for a few months now and I think it's better than anything else, but not good (yet). I feel like it's still young enough that the number of problems is not just decreasing, but there seem to be new problems regularly.
Long time Vim users are also organized human beings in life most of the time. This constant discussion over what editor to use always boils down to this point IMO.
Having a config file and trying to keep it healthy over the years requires such mindset. It might eventually break because you got sick of it, but there are thousands of parameters to that problem. Are you a plugin freak, are you trying to change every single default keybinding, do you try new things, which terminal emulator you like, what about FOMO…
I had an on and off relationship with Zed, because in the beginning there were some bugs and many things were missing, but they are adding and fixing a lot of things and at the current state I use it more than Neovim although I have a relatively maintenance-free config. I always liked Vim/Neovim because I had shitty computers throughout my life and using a snappy terminal interface to write was always easier than using a chunky editor. But nowadays things have changed and Zed is extremely fast too, so this advantage of snappiness is unrelated now. Plus the design is minimal and well-thought, which I always appreciate. Next to VSCode Bloat, I find it extremely easy to look at.
My dream was to have Vim motions by default in every single piece of software like editors, browsers, PDF readers and even Finder. What Vim changed is the motions and the way you interact with the computer and this does not need to be exclusive to terminal interpreters anymore, so I appreciate the effort of editor developers to shift the paradigm to using what Vim invented. Zed does it good and I hope they eventually reach to a state, where I can completely switch.
They don't have syntax highlighting, Zed uses LSP server for each language. I'm sure lisps have them, the question is just to add support in Zed for a particular one.
The tab completion for the AI suggestions is 100% the most annoying feature I've ever used. I just want to indent my line and not have to keep hitting escape 1000 times. Awful.
There's a funny dynamic here I just came to appreciate. A perfect use case for AI is writing config file code (relatively simple stuff with lots of examples in the training data). Zed has replaced VSCode as my GUI editor, but I still use Neovim in the terminal. The "just works" aspect of Zed is nice, but I could see myself maybe opening my Neovim config with it one day to use the AI features to tune something up. Well, maybe I'd actually use Aider, but it's a fun thought anyway.
It makes me wonder if highly configurable software plus AI can be combined for an outcome that "just works" while also being highly personalized. One thing that kind of surprised me about Zed is that the AI assistant isn't very good, in my experience, at answering questions about how to configure Zed. Models have their cutoff date, of course, but this seems like low hanging fruit for some context injection based on keywords. An editor feature that can help me quickly implement my preference choice and get back to work without a visit to the docs would be truly adding value.
I just did the same switch for the same reasons, except I was a newbie to Neovim. The Vim keybindings and way it "handles things" is amazing, but the Neovim-powered bridge to getting it to be a full IDE with bulletproof config and extension support was a PITA out of the box.
Generally I want things to "just work" and if there's extra fancy settings I'm happy to learn them later / slowly as a I go through it. Minor updates to plugins in Neovim would break things, a lot of the error output was next to useless, and I spent waaaaaay too much time debugging what was wrong.
I switched to Zed w/ Vim keybindings and it's a perfect balance.
The Zed editor is great. The AI integration is still quite wonky. The autocomplete through Supermaven for example, makes it hard to see the text clearly and I constantly have to hit escape to see the existing normal text.
The /workflow command which was there earlier is also removed now, so you have to copy paste code which sucks.
That's the one reason I actually did end up using vim, even if Gui editors are theoretically highly superior.
It's always there in the terminal with me. So you know how it goes, you set up $awesome_ide on a separate screen or what have you; start messing in the terminal, and then for quick edits you grab vim anyway. And once you have the whole edit/test/edit/test loop going, well, vim is still there. And hours later you find out the whole IDE has just been sitting there the whole time.
So yeah, I'm not married to vim I don't think. A nicer terminal editor would always be welcome? And if it has vi(m) bindings to ease me into it? Who knows.
Not being in the terminal is a feature, not a bug imo. Terminal editors just can't compete with the GUI, so their only viable role is as an editor of last resort on systems where you don't have a GUI.
I haven't seen anybody mention NvChad, which is a popular pre-configured neovim setup with lots of documentation (and a community of support). You're still free to customize, but it saves a TON of time in terms of getting to the foundational editor features.
The author mentions switching from editor to terminal often - NvChad has built in terminal integration so you can toggle floating/vertical/horizontal terminals (whose contents persist when closed) with a simple keybind.
I'm using Zed too. It is VS Code-ish but feels fast, works out of the box and feels just... right. I wish it had support for Jupyter notebooks, but it looks like it will get there.
And it never crashed on me, unlike VSCode which reminds me of Windows 3.1.
Yeah, notebook support for me is personally the biggest deal breaker right now. I feel pretty confident I could switch the day that notebook support matures.
I switched recently from vscode, and it's now my daily driver. I mainly edit rust & typescript, experience has been great. I did need two critical keybindings for toggling the terminal: https://gist.github.com/b5/8a03cee3cf6321ee65ffcb28899c4362 , and documentation was a little thin on how to set it up
i'm fairly surprised that i fired it up, wrote some go code, and the lsp worked.
I too am growing tired of tinkering and want minimal configs. So much so that I had to force myself to stop using doom emacs in favor of neovim. Neovim setup is much simpler now that lua exists but i'd rather not tinker as much as I do.
Enabling/Disabling plugins is fun in a way when you wanna take the time to do that.
I might give zed a spin a few more times.
Can zed be run from a terminal over ssh or is it just GUI?
It’s only GUI, but you can have it perform the edits over SSH. So it appears to be all local for you, but the files are actually modified on the remote host.
This is the part that impressed me the most! I know other editors "support" this kind of workflow, but opening "remote projects" via SSH is so clean and intuitive in Zed! I love that when you pop the terminal open on a "remote" Zed window, it just opens right in your remote host directory where you would expect.
I switched from VSCode to Zed and I’m a huge fan! They don’t have support for Jupyter notebooks yet so I have to use Spyder for those but I love how easily Zed runs and how configurable it is.
Also half my workspaces are on remote servers and Zed lets me switch between remote and local workspaces easy which I appreciate.
VSCode is currently more complete than Zed but Zed is more configurable. Also I suspect that Zed will improve rapidly and VSCode is mostly already plateaued due to Zed being new and open source and VSCode being old and made by Microsoft.
I've tried both VSC's and JetBrains's (god don't remind me), and they were all a bit mediocre. Especially Jetbrain's felt like a gross overlap that no one tested out.
do you happen to have any examples of what didn't work well? I'm just curious as I switched to vscode and later jetbrains after a decade with vim and I find all of them to be great, though I usually have to modify an option or 2 to get it how I like
I tried one of those AI IDEs for the first time today and I was pretty shocked how good it was even though I’ve used ChatGPT forever. They are going to be standard like git soon. Paid for by your companies
You can literally do all of this in Neovim. Just use a distribution if you wanna outsource config (Astro, Lazy, etc), which is what Zed is. I use LLM in my Neovim, I get autocomplete in my config.
I watched the video and was about to install just to see there's no windows installer. I'll try building from source at some point but kinda took the wind out of my sails
It must be something with my old graphics card (Intel HD 4000) or X because Zed is kind of slow for me, it even stutters or something. gvim on the other hand works fine.
Zen feels so fast on my old intel MacBook it is crazy! I will move entirely to zed from vscode when they implement dynamic port forwarding in their SSH mode ( I feel like it is close )
I still prefer neovim+lazy, but Zed is really pretty good and way way way faster than VSCode. Really, my only stumbling block with Zed is simply that while its vim mode is pretty decent, it's not the same as my neovim+lazy setup. However as pointed out in TFA, it looks like the Zed folks are doubling down on the vim bindings:
For me the problem is that it takes several seconds for Zed to open a file from across the network. Mostly just small code files. They are instant when I open them with vim in the terminal. I open so many files that the delay becomes a slog.
I've been editing directly in the terminal for many years and was looking forward to moving back to a real desktop IDE, but I bounced right off of this. Does it not happen for you or it's just not that bad? Does anyone know of a solution?
> all the configuration that goes into it before I can use it to start writing code.
Yes, this is awful and something the default should've changed years ago instead of continuing this massive collective time waste. But presumably after 15 years you've configured almost everything you need? At least to the point of matching a static config file?
> Lua is great, but one JSON file is even better.
No way, it's a strict downgrade, you can have a simple lua table exactly matching json things, but then should you decide to do anything dynamic/complicated (which at one point even included formatting as Zed broke your config format on changes), you're stuck with json with no way out
> Installing plugins means updating them, which inevitably breaks things.
No it doesn't, just pin the version you the one that works for you and ignore the future? Or do you need that extra functionality from the updates? But then does Zed without a plugin even have this functionality?
But also Zed does plan to have plugins, so this won't be different?
I think I'm actively trying to not do anything dynamic/complicated. :)
If Zed breaks things too much in the future (to the point that its JSON config doesn't let me do something I need to get my work done) I'll probably go back to using Neovim. We'll see how it plays out over time. For now I'm enjoying having less configuration knobs.
> Yes, this is awful and something the default should've changed
> years ago instead of continuing this massive collective time waste.
This doesn't seem feasible, because that would go against the culture and long-term practice of doing things. That's why approach of "starting from scratch and doing it right without the baggage" like Helix's works so much better.
i don't think vim is that bad out of the box. when i ssh into a box and need to get work done, i can install it and use sane defaults with pretty high productivity.
i'm used to a plugin- and config-light setup on my personal systems, with most of the customization being stuff like latex compilation and preview from a keybind rather than major changes to default behavior, but the whole "vim needs a bazillion lines of config!" thing isn't really true. some people like to spend a week bikeshedding it but it's by no means necessary. i've had the same vimrc for years and years and basically never need to change it.
Neovim is fine and just as easy nowadays -- if you can `git clone` two repos (in my case: AstroNvim + my config) and just start `nvim` then you can go fill a glass of water and it will be 80% done by the time you sit back on your computer.
But I agree with you and the OP that the defaults with zero configuration do matter and that I wish we had that in every editor.
> Lua is great, but one JSON file is even better
Yeah that single line makes me doubt the whole post, how can a format without comments be an upgrade to any configuration file is beyond me. My customized configs were full of ‘this was broken on this day by something else, link to obscure thread’ before I accepted the way of default.
Zed supports comments in the JSON file. I don't think I've seen any editor which uses JSON for configuration not allow comments in the file.
Then it isn’t json anymore! Don’t call it that
I wonder if we can come up with an agreed name for almost json stuff... Maybe json+ and we can tac-on additional characters for what's added. json+c (plus comments), json+t (plus trailing commas), json+tc or json +ct (plus comments and trailing commas), and so on
json5[1] is a thing.
[1] https://json5.org
> my workflow consists of switching back and forth between a terminal window and an editor window.
Same! I run neovim in tmux together with stuff I hack on. I switch beteen tmux windows with shift-arrows and it works so well. I run this full screen in Ghostty. No distractions.
I try Zed and VSCode and I always come back to this setup. It works so well for me personally.
> I try Zed and VSCode and I always come back to this setup.
I have Ctrl+` set to switch focus between the editor and the terminal panes in VSCode, so I can toggle between them pretty easily as this is also my workflow
If anyone's wondering, here's what I have in my keybindings.json
ctr+` is the default behavior on VS Code I use it all the time and I didn’t set it up and I’m sure as hell neither did my co workers.
It’s a nice short cut if you have a keyboard with backtick to the left of 1 in the numeral row. If you’re from a country where keyboards have a different key there, I would recommend setting up a short cut manually.
It only opens the terminal by default. The key binding is to use the same shortcut to focus back to the editor.
It does that by default too.
It didn't when I set it up, but I haven't removed the keybindings to test if this has changed recently.
Nope. It minimizes the terminal by default, at least on macOS. These keybinds leave the terminal / lower bar open and just shift focus back to the editor.
I can’t tell if Ctrl-` is portable. Anyone know if it’s representable on terminals?
I've always just closed vim to use the terminal, and started it up again to go back to editing. I find it difficult to operate any other way.
I know people who use ^Z to suspend vim and then foreground it again.
> I've always just closed vim to use the terminal
You don't mind losing all your editor state? If you don't like working with multiple terminal windows, why not open a term within vim with `:term`?
I don't lose any editor state, at least nothing I care about.
In my configuration vim will save (among other things):
- Cursor position
- Undo history
- Register state
:term is clunky for me, mainly because my muscle memory is to just :wq
I got it working as seamlessly as I could once just in an attempt to use it but I stopped pretty quickly.
What editor state are you losing when you leave vim?
I run a pretty light vanilla vimrc (60 lines maybe) and with two lines you can enable vim undofiles and returning the cursor to the last location upom reopening a file. For me, quitting vim is functionally equivalent to ^Z?
You may lose LSP state like rust-analyzer's which takes a while to restore. You may lose opened buffers and positions within them (unless you have some session restore logic which may also take time), window layout, copy buffers, edit history and lots of other state.
Ah I don't run any LSPs so that's fair.
Retaining positions, buffers, and edit history between sessions is all straightforward in vanilla vim though. Unless you run an autolinter or formatter that edits your target file and wipes the history.
For that there is ra-multiplex (to which I contributed sockets support).
I don't use any other LSPs which have a long warmup time, but if I did then they can also be used behind ra-multiplex.
You lose the open windows/tabs. Apart from trivial one-off scripts I basically never have only a single tab open.
I don't use tabs, sometimes I use split windows (usually only when vim-diffing), mostly I use multiple terminal windows in a tiling WM. I do use multiple buffers but I usually don't care about editing more than one or two at a time and it's easy to re-open these whenever I need to.
That's true for me too but usually my tabs and windows are managed one level higher, by the terminal emulator, or I'm opening vim with -o/-O to open a split window directly.
I’ve definitely done the ^Z thing. The catch is to remember you did it if you get distracted in the terminal. Nothing like finding some vim job in the background and you can’t remember what it was.
For me it only works because I never reuse a single terminal for unrelated things. Additionally, I have my virtual desktops grid set up so that different types of tasks are always in certain places, so if the switcher shows a terminal somewhere, I know roughly what it's for even without going to look at it. So I can't "lose" a terminal.
So it's fine for X11 terminals, but not for /dev/tty2
Don't forget you can just :!some-shell-command though - not just in vim but in lots of programs even.
Another (neo)vim+tmuxer chiming in. One major missing feature (compared to vscode) is opening file links from the terminal back in vim. It was such a major pain to me, so I ended up writing a tmux plugin to solve it. I thought you might find it useful - https://github.com/artemave/tmux_super_fingers
Yeah the tmux / vim combo is so hard for me to beat with other editors still. I used Zed exclusively last month thinking the LLM integrations would be a compelling enough reason to finally switch. Like the post author, I'm a little fatigued with config / plugin churn since I switch languages frequently and it always takes some customizing to make vim work well when I do that.
As the author describes though, I found myself copy-pasting a lot between LLM chat and editing buffers. In tmux, I have a really simple function that copies select panes (using tmux capture-pane) into my prompt, or I can give it full files for context. Most of the time though, I can do something like `llm -t 0 -t 1 'what is this libSSL error indicating? here's my code', where -t 0 gives it my vim pane and -t 1 gives it the terminal I'm running things in. I've been surprised that this somewhat rudimentary approach has felt far more effective than the more sophisticated editors I've been trying.
Is this just me? Does it seem to others that the LLM-enabled editors coming out these days still require a lot of copy-pasting of context that can be easily provided with just a dump of tmux output?
Everything-is-just-text might be crude but dang does it make quick and dirty LLM integrations a snap!
I use tmux and neovim along with the copilot plugin[0]. I prefer it over the VSCode copilot integration, to me it feels less obtrusive and out of the way, which is what I want. You're also not dealing with API costs since it uses the regular Copilot subscription.
[0] https://github.com/github/copilot.vim
codecompanion.nvim has some pretty nice ways to get context into the llm chat without copying and pasting.
have you tried cursor?
i had the same workflow but now i use zed w/ tmux (tmux inside the zed terminal)
Zed is the only GUI editor I've used as my daily driver after 15+ years of development (hardcore vim fan). Vim Mode is wonderful, the terminal pane works well, UI is butter-smooth, LSP integration beats VS Code's IMHO, and the LLM-powered autocomplete works well (haven't tried chat/generation). Nice themes, too.
The lack of debugger support will put some off, but I bet they'll get to it someday. It's already progressed so much in the four or five months I've used it (esp. Vim Mode).
Zed seems nice, but the fact it wants you to sign in, wants you to connect to Github, wants you to sign a CLA, etc..., isn't what I want in an editor. I'm perfectly content with Neovim/Lazyvim, especially the fact that you definitely know there won't ever be a rug pull or weird monetisation scheme.
Edit - also, as far as config goes, "distros" solve this. LazyVim is everything I want in an editor and more, with zero config. Installing LSPs and plugins is super easy, arguably even easier than with editors like VSCode or Zed.
Just last week some hero claimed to be adding helix keybindings to zed (https://github.com/zed-industries/zed/issues/4642#issuecomme...).
Golly I hope they succeed.
What I find strange about an open source product funded by VC money is that all of the people are helping make it a better editor and yet when they eventually exit none of the money will go to them.
Compare that to vim where it's truly an open source product.
I think you are not very accurate about “open source product” vs something like “community led project”.
People being able to adapt their software to their own needs by making changes to the code is exactly what open source is about. This is good.
What is a problem though, is to have the code merged in the main repository requires you to gift them the rights to your code (not just license it). They are also not very clear about this in the summary of their CLA: “You're giving Zed permission to use and share your contributions (like original works or modifications).” which could be misunderstood to just be a usual open source licensing agreement, but seems to be complete handover of copyright: https://zed.dev/cla
This is not good, and something people should be more aware of when contributing.
No, I don't mean it from like a licensing or legal perspective at all. I'm thinking more of vibes and ethos.
There is something strange where you are sort of making your product better through open source contributions and yet all of the capital gains from your company's eventual sale will only go to you.
There is something really weird and nasty about that.
> requires you to gift them the rights to your code (not just license it).
The legally binding section only talks about giving them an infinite free license to it. It does not say you hand over your copyright, so the summary seems correct.
I still don't think you should sign it. The editor code seems to be variously under GPL, AGPL and Apache 2.0, all of which would be fine without one.
If I want a thing badly enough to make it happen for myself and others such that I make a code change, that's orthogonal to whatever others are paying each other for around that code. So long as I don't later lose access to that code, why care? I'm all for avoiding contributing to ventures that are harmful in some way, but I don't think somebody making money as a side effect is harmful.
The alternative would be to presume that I have some kind of ownership over it by having contributed to it--and I'm a bit allergic to the idea that code can be owned.
> Compare that to vim where it's truly an open source product.
Where there wouldn't be any money in the first place? I don't see popular vim plugin authors getting paid.
Maybe I'm not understanding your point.
I've recently switched from SublimeText to Zed and I like it so far, mainly because it's noticeably faster at all UI touch points (typing, searching, pane switching). I mainly use it to work on a Rails codebase. I set up a bunch of snippets to have the same keyboard shortcuts offered by Sublime to insert ERB instructions. I managed to get rubocop to perform in-editor validations, same for eslint however "format on save" with eslint continues to fail (it either writes an empty file or it ignores my eslint config and falls back to its internal settings). I haven't used its code completion features since my use of AI to assist with coding happens outside of an IDE (yes, I will try to change that).
> Lua is great, but one JSON file is even better
I will never understand how you go back from a very customized editor setup to the one with "reasonable defaults with little to no things to configure".
Great talk on this topic by TJ: Personal Development Environment: https://youtu.be/QMVIJhC9Veg
>I will never understand how you go back from a very customized editor setup
because when the very customized setup inevitably breaks the amount of headache you have is roughly proportionate to the amount of customization, whereas software with strong defaults tends to deal with that for you.
This is particularly the case with neovim which, in almost deliberate defiance of any systems thinking, just tends to consist of a few dozen moving parts loosely tied together and you have to sort of pray that updating some doesn't just break things. Paraphrasing Russ Ackhoff, if you take the best part of every car and put it together you don't get the best car, you get something that doesn't even drive, this is how I've felt more than once with very bespoke editor setups
Haha this is so true. I stopped upgrading neovim when something little broke and I couldn't work out how to fix it an hour or so. It was something stupid like the column bar not having the right colour anymore.
Just hope that nothing breaks in an OS upgrade.
Yeah, they changed the default colorscheme in neovim at some point in the last year or so. I have an extremely minimal config and don't even use syntax highlighting or tab completions but I could not get it to render the way it used to. I wasted at least 30 minutes on this for absolutely no good reason. So I git bisected, made my own build (which took maybe 10-15 minutes) and will likely never upgrade neovim again.
I see people mentioning neovim "breaking" and to this day I have no idea what everyone is talking about. I have a very customized neovim setup, update almost every day, and quite literally have never experienced a single thing breaking.
I agree. Cramming a dozen of low quality plugins without understanding how they operate and hoping updating won't break things is not a great way to go.
I understand "just make it work" mentality, but it might be useful to have deeper understanding of a tool you use several hours everyday.
Back in the '90s I would customize my development environment to within an inch of its life, but after going from one machine to the next, one toolchain to the next, one operating system to the next, year after year, culminating in one ridiculous six-month period when I had to pave my dev machine and reinstall everything from scratch every two weeks (yes, this was stupid; yes, I knew it was stupid at the time; no, I had no way out of it, not if I wanted to keep my job) - I learned that adapting myself to the defaults was a lot less work than adapting the settings to me.
Or, to put it another way: every step you take away from the mainstream has a cost, so you had better know how much you are willing to pay and budget your quirks accordingly.
Or you just had to structure your knowledge bases and settings properly. I can restore dev-part of my pc anytime by installing git and making a few clones. Going to another machine is literally a matter of pasting gitlab credentials and init scripts into a terminal. I can even replay things if they have to repeat in a project because I save all the steps I take into a project/job-wise obtf.txt. Working in a non-automated non-repeatable way is so self-inflicted. It’s akin to not having a car because it has a cost.
That was not an option for me at the time, but I'm glad it works for you.
How is the work of copying an editor config/plugin folder with a script every two weeks for six months worse than using the bad suboptimal defaults every day?
> every step you take away from the mainstream has a cost
Customizing neovim is mainstream
If it can open text files and has a cursor im good. Irl i dont grow attached to environments either. Its just to expensive when they vanish. Its just people now :)
Not sure why but I feel almost physical pain when I see nano opened on a fresh setup. I just can’t handle it, it’s surreal.
> I will never understand how you go back from a very customized editor setup to the one with "reasonable defaults with little to no things to configure".
That's one of the reasons why I chose Vim over Emacs after switching back and forth for a while.
I do prefer the design of Emacs because I prefer having full control over my environment - I even coded more than a couple of tiny, application-specific editors - but sometimes I have better things to do than e.g. reading docs or searching for a plugin/extension mod that does what I need, or do it myself; sometimes I am a mere luser who want things to "just work" out-of-the-box.
Zed has the least uncanny valley of any vim emulation that I've tried.
Switching is not feasible for me until they get mini.surround[0] and Flash.nvim[1], particularly Flash's treesitter mode (see screenshot of [1] to get an idea).
They work particularly well together to select semantically meaningful chunks of code and add/remove/change surrounding parens/braces/curlies/etc.
0: https://github.com/echasnovski/mini.surround
1: https://github.com/folke/flash.nvim
Surround is amazing. I agree that all these vim modes are nice, but nothing beats the real thing.
I think I understand the use case for a smart surround plugin like this; I watched the demo video and saw and lot of picking-and-pulling text.
What I don’t understand is the development workflow that includes so much text manipulation. If you’re writing new code, there’s nothing to manipulate. If you’re refactoring existing code, wouldn’t you want the support typical AST-based refactoring tools provide? Where’s the sweet spot where shuffling strings around makes sense?
That’s not sarcasm. I’m genuinely asking.
For me (maintainer of Zed's vim mode) it comes down to a few things:
1. LSPs differ per-language, and so I'm never sure whether I'll get lucky today or not. It's more reliable for small changes to talk about them in terms of the text.
2. LSPs are also quite slow. For example in Zed I can do a quick local rename with `ga` to multi-cursor onto matching words and then `s new_name` to change it. (For larger or cross-file renames I still use the LSP).
3. I err as a human continually, for example in Rust a string is `"a"` and a char is `'a'`. It's easy for my javascript addled brain to use the wrong quotes. I don't know of any LSP operation that does "convert string literal into char literal" (or vice versa), but in vim, it's easy.
We are slowly pulling in support for various vim plugins; but the tail is long and I am not likely to build a vim-compatible Lua (or VimScript :D) API any time soon.
For example, most of vim-surround already works so you could get the most used parts of mini.surround to work with just a few keybindings `"s a":["vim::PushOperator", { "AddSurrounds": {} }]`, but rebuilding every plugin is a labor of love :D.
I think you’re just highlighting the different preferences people have between a text editor and an IDE. Obviously the line between the two is very blurry. I much prefer being able to efficiently edit text myself rather than relying on refactoring tools.
I use cursor and vim now. I have been on vim for 15+ years. Are there LLM extensions that make vim work like all these new AI editors? I would prefer to stay in 100% vim world, but the productivity benefits from LLMs with composer mode and context is so powerful.
Avante is much more active and polished at this point, but there's alternatives:
https://github.com/baketnk/l.nvim (self-shill, docs overhaul needed)
which was inspired by the original:
https://github.com/yacineMTB/dingllm.nvim
Also brand new from ggerganov: https://github.com/ggml-org/llama.vim
dingllm is very straightforward, you submit your entire selection/buffer and it streams out to the current position. mine is a bit more complex with configurations, context management and so on.
The thing I always tell people is just roll your own. The docs are there, the LLM is there, use them. At the end of the day it's just an http call against text from your buffer to put text in a buffer.
also RAG implementation, and the apply code feature of cursor..
Still early days, but something to watch.
https://github.com/yetone/avante.nvim
If you want something like composer but want to stay fully FOSS/CLI oriented, check out https://github.com/ai-christianson/RA.Aid
I’ve been pretty happy with aider. I have it running in a separate tmux window and can switch between it and nvim easily.
Copilot has a vim extension that works quite nicely, but doesn't do all the things that cursor does.
I use Neovim with Copilot assistant plugins all the time for work
I switched from this to TabNine. I was impressed that, with multiple buffers open, it seems to synthesize the right three-way merges.
What is cursor in this context? A vim plugin?
If they’re talking about the Cursor I’m familiar with, it is “The AI Editor”. Basically it’s a fork of vscode with LLMs built in
https://www.cursor.com/
codecompanion.nvim is pretty cool.
I tried and I really liked so I considered a switch but: - It's missing debugging capabilities. They have it in their pipeline, but, as it stands, not for production use if you do not want to develop with debug prints all the time. - The font rendering still needs some polishing. On a non retina display using a dark mode in mac the fonts are pretty blurry in comparison to vscode, and I had to use a medium weight for the editor font for improved readability.
I've been daily driving Zed on Windows (building from source) for maybe 2 months now and I'm pretty happy. It's a nice middle-ground between editing single files in NeoVim and bringing up a JetBrains IDE for an incredibly complex project.
I think the only thing that is really outstanding for Windows is SSH support.
Everything largely "just works" and my experience getting a plugin with syntax highlighting working and merged for a DSL I maintain was very smooth.
The only thing I want for Zed is context aware LLM suggestions, then I can drop Cursor entirely. It’s just that their Composer mode is so good.
Adding individual files in Zed feels so cluncky by comparison.
Cursor’s composer agent is so slick. I tried Zed out for a few minutes this evening, and in addition to what you said, I was surprised that there wasn’t an option to bring my own tab completion server.
Zed felt very nice, definitely reminded me of the good old days of Sublime. With literally the two features mentioned above, I think I would switch… but it’s easy to say until it happens for sure.
I’ve been using Sublime Text for more than a decade and I gave Zed a try recently. I don’t have good reasons like the author, but I kinda wanted to see what the hype was about.
I really liked everything about it including the much better LSP support and the base key map for Sublime Text was very close so I felt at home quickly.
Then I tried actually writing code in my usual workflow and this is where things started to fall apart. I’ve been writing in Ruby for almost 10 years now and when I type things like `def<tab>` I’m used to Sublime filling in the snippet and allowing me to quickly enter and tab through the components. Same for a bunch of really common Ruby concepts like blocks. I found this to be very limited and even though I created custom snippets they never would render with the correct indentation. I think the Ruby language extension just needs some additional work and probably doesn’t get much attention. For me I didn’t have time to figure it out and contribute so I went back to Sublime Text.
I will definitely continue to play with Zed and see if it gets better because of the native AI integration. I’m not an AI fanboi and I usually avoid it, but being able to supply the open and existing files as context when asking the assistant to generate things like tests performed much better with context than without and were much closer to how we write and format tests.
I echo this sentiment. Also, a long time rubyist. I pretty much go between neovim or Sublime everything else has felt off for Ruby development. I use vintage (vim) mode for Sublime and it’s the sweet spot. I get all the motions, but also some -non vim actions that I appreciate. This might feel like uncanny valley, but it works.
I just can't see myself ever leaving Sublime. VS Code is good, but uses way too many resources without really delivering commensurate functionality compared to Sublime. I thought Zed might do it, but their main focus seems to be trying to integrate LLMs which are a productivity drain with how inconsistent they are. So if anything that's a reason to stay away, not to use it. Thus far Sublime is the only editor which is just focusing on doing a good job being an editor and not using hella resources.
I’ve fully migrated from Sublime Text to Zed, but in these areas both are lacking things the other has.
Sublime has great language support out of the box but poor LSP support (basically outsourcing it to a user plugin instead of having a native integration).
Zed has great LSP support but ”poor” language integration (also outsourcing the language plugins to the community, which makes the vary in quality and feature set).
But Zed has great AI integration which Sublime completely lacks, if you’re into that.
This is close to my experience. Also long-time Sublime user, almost always writing Ruby.
I don't know if I'm an AI fanboi or not, but for generating things like factorygirl definitions and simple rspec unit tests, GPT is seriously good (in the sense that it saves me tedious work, not that it is particularly fantastic).
I gave Zed a try, and it seems great! The only problem is that I can't seem to get GPU acceleration working on my laptop (Thinkpad x220 running Debian), which negates the performance benefit Zed has over other editors. I know I'm in a slim minority of people with this problem, but I can't be alone. Ordinarily I use vscode on my desktop in my dayjob, and vim on my Thinkpad if I'm on the move. Using vim over vscode extends the battery life by hours. Thinking out loud: How much will using a laptop's GPU for rendering impact the battery usage? Often I need to be able to get at least a few hours usage out of my laptop between charges when traveling.
>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.
this resonates with me. i've spent so much time configuring neovim in the terminal (kitty) and i've never had everything work 100% of the time. simple things just like seeing an entire typescript error are challenging to get working. those errors just continue on one line outside of the screen.
with LLM's the tradeoff tipped in the favor of cursor with the neovim extension.
> 2. It just works
so i switched to cursor last week from neovim in the terminal and this is how i feel. but, i'm not going to invest more time to check out Zed now that i just got cursor set up the way i like it.
but it's great to see all the progress in IDE's lately.
I wanted to like Zed but tying buffers to tabs is a deal breaker for me. They have really good vim motion support but don't let you view any buffer in any pane.
Tried for a long while to use Zed. It was great and I loved it - and maybe I could have switched to a GUI editor for real though for the first time in my life.
But man. File trees and tabs are the worst DX I can possibly imagine. Try as I might, I just could not get used to the tab and tree workflow. Creating new files killed me. Hiding the tab didn’t really help because the editor assumes you’re using tabs and at that point it doesn’t feel like buffers, it feels like tabs with the tab bar hidden (go figure).
I’m not even a buffer power users, but I think the default assumption of buffers over tabs, and explore over a file tree, led to 1000 other great decisions that make vim vim.
I think unless the zed core team really tried to move away from tabs and trees (and I don’t think they would nor should) they’ll fail to capture a meaningful share of vim users
I'm curious what's your usecase?
As another neovim/vim expat using VSCode these days (because I got tired of fixing configuration), this is also my number one complaint. I want to be able to view any file in any split. Honestly, I wish my whole window manager worked this way (stacking WMs get close). And my browser - why can't I display any "tab" in any window with a couple of key strokes? It drives me batty how inflexible the split/buffer/pane/window model is outside of vim and emacs land. I don't want tab groups; I don't want independent windows; I don't want VSCode editor groups that are pita to close. For the love pixels, I want to make the content I care about appear in the window I have in front of me, where those windows are arranged to consume my monitor's space without overlap. /soapbox-dismount.
Not that guy but how about viewing two parts of the same file side by side, organizing them vertically or horizontally as needed, opening like a hundred files and cycling through them in a sane fashion, probably dealing with macros. Tabs get very annoying if you have too many of them, and buffers are a good solution to that problem.
I don't understand the the configuration argument against neovim! In my opinion there are a few good choices:
- none or very minimal config
- install lazyvim or other tool
Then you're done! The option is still there if you really like tweaking things, but I really enjoy the out of the box experience with lazyvim.
Made the same reply elsewhere. You can do everything he desires and stick with Neovim. He just pretends he never heard of Astro or Lazy. He uses Packer though, so he might not keep up with the state of the ecosystem or something. I caught myself wondering if this was marketing.
> Just works
Probably JetBrains is best in class. How much config you need in Zed to get productive with e.g. PHP dev vs install PhpStorm?
I think there is a spectrum of tools where Neovim requires more customization and JetBrains is the most Just-Works. Everything else in between doesn't just work and requires customization in their opinionated way.
> Why Zed?
> 1. Vim mode
Out of all non-vim editors with Vim mode JetBrains is again has the best integration via IdeaVim.
> 2. It just works
Do I need to install extension and configure them?
> 3. JSON Configuration
Comparing JSON vs Lua Table I can't see any benefits. Most configs in Neovim I just copy pasted from the GitHub repo and changed couple things.
> 4. Configuration autocomplete If you need a good autocomplete for a config file you probably spending too much time on your config.
> 5. Native LLM integration
Nice
> 6. Fast!
Nice
I just hope they're able to fix their font rendering, it looks like crap on 100% DPI scaling.
Can you set a bitmap font?
I think Zed is very close to being amazing, but it might be premature. Just recently I think they fixed a bug where undo broke somehow when you pasted something? I could never quite reproduce it, but I ran into it a couple times a week. You still can't specify indentation settings per-file, which I consider essential. For some reason the GPU acceleration is very fast on computers with good hardware, but very slow on bad hardware. I get that it's current year, but a text editor should run well on a T480 imho. Frequently Zed just starts up and shows some of the other windows. I.e. it just renders like another existing Firefox window and I can't do anything to fix it, but restart. Yesterday multiple Zed windows all just showed my login screen (when I was already logged in). And a very recent problem is that Zed will just not format certain files. I think they switched to formatting via the language server by default? It will just format some files like it's supposed to and other (seemingly randomly chosen) files will just result in an error that tells me it could not format the file.
I have been using Zed for a few months now and I think it's better than anything else, but not good (yet). I feel like it's still young enough that the number of problems is not just decreasing, but there seem to be new problems regularly.
Long time Vim users are also organized human beings in life most of the time. This constant discussion over what editor to use always boils down to this point IMO.
Having a config file and trying to keep it healthy over the years requires such mindset. It might eventually break because you got sick of it, but there are thousands of parameters to that problem. Are you a plugin freak, are you trying to change every single default keybinding, do you try new things, which terminal emulator you like, what about FOMO…
I had an on and off relationship with Zed, because in the beginning there were some bugs and many things were missing, but they are adding and fixing a lot of things and at the current state I use it more than Neovim although I have a relatively maintenance-free config. I always liked Vim/Neovim because I had shitty computers throughout my life and using a snappy terminal interface to write was always easier than using a chunky editor. But nowadays things have changed and Zed is extremely fast too, so this advantage of snappiness is unrelated now. Plus the design is minimal and well-thought, which I always appreciate. Next to VSCode Bloat, I find it extremely easy to look at.
My dream was to have Vim motions by default in every single piece of software like editors, browsers, PDF readers and even Finder. What Vim changed is the motions and the way you interact with the computer and this does not need to be exclusive to terminal interpreters anymore, so I appreciate the effort of editor developers to shift the paradigm to using what Vim invented. Zed does it good and I hope they eventually reach to a state, where I can completely switch.
No syntax highlighting for LISP or Scheme, so... It's fun, but not something I can use right now.
They don't have syntax highlighting, Zed uses LSP server for each language. I'm sure lisps have them, the question is just to add support in Zed for a particular one.
There are extensions for scheme and racket: - https://zed.dev/extensions?query=scheme - https://zed.dev/extensions?query=racket
The tab completion for the AI suggestions is 100% the most annoying feature I've ever used. I just want to indent my line and not have to keep hitting escape 1000 times. Awful.
Turn it off?
With most of these tools you can turn off the suggestions, and configure a keyboard shortcut for when you do want some suggestions.
It’s unfortunate that it converged on that rather than F1.
There's a funny dynamic here I just came to appreciate. A perfect use case for AI is writing config file code (relatively simple stuff with lots of examples in the training data). Zed has replaced VSCode as my GUI editor, but I still use Neovim in the terminal. The "just works" aspect of Zed is nice, but I could see myself maybe opening my Neovim config with it one day to use the AI features to tune something up. Well, maybe I'd actually use Aider, but it's a fun thought anyway.
It makes me wonder if highly configurable software plus AI can be combined for an outcome that "just works" while also being highly personalized. One thing that kind of surprised me about Zed is that the AI assistant isn't very good, in my experience, at answering questions about how to configure Zed. Models have their cutoff date, of course, but this seems like low hanging fruit for some context injection based on keywords. An editor feature that can help me quickly implement my preference choice and get back to work without a visit to the docs would be truly adding value.
I just did the same switch for the same reasons, except I was a newbie to Neovim. The Vim keybindings and way it "handles things" is amazing, but the Neovim-powered bridge to getting it to be a full IDE with bulletproof config and extension support was a PITA out of the box.
Generally I want things to "just work" and if there's extra fancy settings I'm happy to learn them later / slowly as a I go through it. Minor updates to plugins in Neovim would break things, a lot of the error output was next to useless, and I spent waaaaaay too much time debugging what was wrong.
I switched to Zed w/ Vim keybindings and it's a perfect balance.
The Zed editor is great. The AI integration is still quite wonky. The autocomplete through Supermaven for example, makes it hard to see the text clearly and I constantly have to hit escape to see the existing normal text.
The /workflow command which was there earlier is also removed now, so you have to copy paste code which sucks.
> It's only been a day since I really started using Zed instead of Neovim
Please update in 1 year
Zed doesn't run in terminal, sadly.
That's the one reason I actually did end up using vim, even if Gui editors are theoretically highly superior.
It's always there in the terminal with me. So you know how it goes, you set up $awesome_ide on a separate screen or what have you; start messing in the terminal, and then for quick edits you grab vim anyway. And once you have the whole edit/test/edit/test loop going, well, vim is still there. And hours later you find out the whole IDE has just been sitting there the whole time.
So yeah, I'm not married to vim I don't think. A nicer terminal editor would always be welcome? And if it has vi(m) bindings to ease me into it? Who knows.
Perhaps Helix?
https://helix-editor.com/
Zed needs a full helix bindings support and helix needs plugins. Both are so close!
Check out micro: https://micro-editor.github.io/
It's a terminal editor with mouse support and sane key bindings.
Not being in the terminal is a feature, not a bug imo. Terminal editors just can't compete with the GUI, so their only viable role is as an editor of last resort on systems where you don't have a GUI.
I haven't seen anybody mention NvChad, which is a popular pre-configured neovim setup with lots of documentation (and a community of support). You're still free to customize, but it saves a TON of time in terms of getting to the foundational editor features.
https://github.com/NvChad/NvChad
The author mentions switching from editor to terminal often - NvChad has built in terminal integration so you can toggle floating/vertical/horizontal terminals (whose contents persist when closed) with a simple keybind.
I'm using Zed too. It is VS Code-ish but feels fast, works out of the box and feels just... right. I wish it had support for Jupyter notebooks, but it looks like it will get there.
And it never crashed on me, unlike VSCode which reminds me of Windows 3.1.
Yeah, notebook support for me is personally the biggest deal breaker right now. I feel pretty confident I could switch the day that notebook support matures.
I switched recently from vscode, and it's now my daily driver. I mainly edit rust & typescript, experience has been great. I did need two critical keybindings for toggling the terminal: https://gist.github.com/b5/8a03cee3cf6321ee65ffcb28899c4362 , and documentation was a little thin on how to set it up
i'm fairly surprised that i fired it up, wrote some go code, and the lsp worked.
I too am growing tired of tinkering and want minimal configs. So much so that I had to force myself to stop using doom emacs in favor of neovim. Neovim setup is much simpler now that lua exists but i'd rather not tinker as much as I do.
Enabling/Disabling plugins is fun in a way when you wanna take the time to do that.
I might give zed a spin a few more times.
Can zed be run from a terminal over ssh or is it just GUI?
It’s only GUI, but you can have it perform the edits over SSH. So it appears to be all local for you, but the files are actually modified on the remote host.
https://zed.dev/blog/remote-development
This is the part that impressed me the most! I know other editors "support" this kind of workflow, but opening "remote projects" via SSH is so clean and intuitive in Zed! I love that when you pop the terminal open on a "remote" Zed window, it just opens right in your remote host directory where you would expect.
>my workflow consists of switching back and forth between a terminal window and an editor window
You can open as many terminal buffers in neovim as you'd like, AND at the same time you can open as many neovims in terminals as you'd like...
Why choosing GUI neovim client and switching back and forth? Truly don't understand it
I love Zed. Maybe the only problem I've encountered:
- have a couple of windows open, each showing a different directory
- in one, open a file from it's directory, not by locating it in the file tree, but via the open dialog
- file opens in the other window
I get that my second step is 'wrong' but this behaviour is still annoying and feels buggy.
I switched from VSCode to Zed and I’m a huge fan! They don’t have support for Jupyter notebooks yet so I have to use Spyder for those but I love how easily Zed runs and how configurable it is.
Also half my workspaces are on remote servers and Zed lets me switch between remote and local workspaces easy which I appreciate.
Reading the article, I thought every positive mentioned is also in VS Code, but VS Code has a larger more mature community.
What drew you to Zed over VS Code?
VSCode is currently more complete than Zed but Zed is more configurable. Also I suspect that Zed will improve rapidly and VSCode is mostly already plateaued due to Zed being new and open source and VSCode being old and made by Microsoft.
Also I’m not immune to hype I suppose
I've tried both VSC's and JetBrains's (god don't remind me), and they were all a bit mediocre. Especially Jetbrain's felt like a gross overlap that no one tested out.
I'll give Zed's vim-mode a try, great post!
do you happen to have any examples of what didn't work well? I'm just curious as I switched to vscode and later jetbrains after a decade with vim and I find all of them to be great, though I usually have to modify an option or 2 to get it how I like
I thought you can't pry Neovim and iTerm from my hands... then I tried around same time both Zed and Warp terminal.
I switched just to keep things interesting and didn't go back. That was last year maybe Sep/Oct.
I had to use VSCode to collaborate and like it in general.
> LLMs are happening, whether we like it or not.
I tried one of those AI IDEs for the first time today and I was pretty shocked how good it was even though I’ve used ChatGPT forever. They are going to be standard like git soon. Paid for by your companies
You can literally do all of this in Neovim. Just use a distribution if you wanna outsource config (Astro, Lazy, etc), which is what Zed is. I use LLM in my Neovim, I get autocomplete in my config.
I watched the video and was about to install just to see there's no windows installer. I'll try building from source at some point but kinda took the wind out of my sails
It must be something with my old graphics card (Intel HD 4000) or X because Zed is kind of slow for me, it even stutters or something. gvim on the other hand works fine.
Zen feels so fast on my old intel MacBook it is crazy! I will move entirely to zed from vscode when they implement dynamic port forwarding in their SSH mode ( I feel like it is close )
I really like zed, but without DAP support it's just not as useful as nvim or vscode.
What is DAP?
Not OP but I would guess that in this context they mean "Debug Adapter Protocol".
Zed is great! I used it exclusively for Advent of Code in Go this year and I was marvelous!
I love Zed, I just need Statamic Antlers support and haven't bothered to write it yet.
Zed supports both vim and emacs key bindings. Blazing fast too
unfortunately I can't use Zed until they support REPL on remote connections (or remote Jupyter)
Zed is the jam
[dead]
[flagged]
More blah.
Biggest dealbreaker for me using Zed is that it’s not a TUI but a full on GUI app. I might as well just use VSCode with vim bindings at that point.
I still prefer neovim+lazy, but Zed is really pretty good and way way way faster than VSCode. Really, my only stumbling block with Zed is simply that while its vim mode is pretty decent, it's not the same as my neovim+lazy setup. However as pointed out in TFA, it looks like the Zed folks are doubling down on the vim bindings:
https://zed.dev/blog/vim-2025
It's be kinda cool if Zed had a TUI mode (in that the rendering engine would generate VT escape sequences).
For me the problem is that it takes several seconds for Zed to open a file from across the network. Mostly just small code files. They are instant when I open them with vim in the terminal. I open so many files that the delay becomes a slog.
I've been editing directly in the terminal for many years and was looking forward to moving back to a real desktop IDE, but I bounced right off of this. Does it not happen for you or it's just not that bad? Does anyone know of a solution?