> 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?
> 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 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.
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.
> 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.
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.
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.
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.
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.
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?
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?
> 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.
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.
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.
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.
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 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
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.
I know people who use ^Z to suspend vim and then foreground it again.
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`?
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!
[0] https://github.com/github/copilot.vim
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).
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.
Golly I hope they succeed.
Compare that to vim where it's truly an open source product.
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.
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.
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 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
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
Just hope that nothing breaks in an OS upgrade.
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.
> every step you take away from the mainstream has a cost
Customizing neovim is mainstream
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.
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
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.