SpaceVim 2.0
spacevim.org
spacevim.org
"Perfect is the enemy of good", they say.
However "barely adequate yet entrenched is the enemy of good" is what's happening with vim/Emacs improvements.
The core editors are antiquated and creaky technology that won't and can't really be updated correctly because those changes would break too much and also because there's nothing to be gained financially from it (sad, yet ever-present fact of life).
One of the biggest and most successful attempts at such a modernization is Neovim, but it still won't reach Sublime Text or VS Code levels of popularity, because they're still a team of volunteers, not a company backing it.
With all the news I've seen about Neovim over the years I keep meaning to try it out at some time. I mainly haven't because there's nothing broken with my current setup and it seems like an investment of time and effort to reach a similar setup: I have quite a few changes in my vimrc and am using a number of plugins which I would need to get working or find replacements for.
In the mean time I'll be doing something useful with a tool I know and that doesn't need me to relearn the same basic tasks iteration after iteration.
The computing world is big enough that someone that cut their teeth on Visual Studio can still be happily using it in 2022, a quarter century after its original launch. And will likely be able to use it in 2057, half a century after its original launch.
With more or less the same keybindings and core workflow it had back in 1997.
Just hoping they will address that in a future version of Xcode.
In VSCode extension, the VIM marks that opens a file has never worked for me.
As well, the ability to go back to the last edit in any recent files with `'.` doesn't work.
Other than that it does all I want.
I couldn't imagine not being able to hover my cursor over something to read its type definitions, cmd+click to go into whatever I'm clicking on, etc.
Sometimes I see one of those videos of a fully tricked out NeoVIM and it looks tempting, but I know I wouldn't actually like it.
I'm sure some vim expert would be annoyed at my mouse usage, but like you said, there are tons of useful features exposed.
A couple of years ago I helped a friend out with moving some stuff off an ancient Solaris database server somehow still in production.
Iirc it was Solaris 2.6… other than remembering which Unix tools were shipped broken by Sun, I was able to function right away. Shockingly, I even retained muscle memory of some of that database commands after many many years! :)
If there were a GUI editor that had 1st-class Vim keybindings, native LSP support, fuzzy finding, and convenient file management tools a la Ranger, and optionally a built-in terminal, I'd switch in a heartbeat.
OniVim2[0] looked really promising, but the project has unfortunately stalled after the creator had to step back for personal reasons.
In the end I settled for vanilla emacs, where I gradually build up a configuration. Once a week I pick something that's been annoying me in the past week and do the configuration for that by hand. This way I avoid bloat and it keeps things pretty sane in terms of configuration complexity. Also I get plenty of time to learn all the shortcuts in my setup as opposed to having a confusing mess of 30 extensions to learn all at once.
If that's the way to work with vim/Emacs, that would basically kill all mainstream interest in them.
"Work during the week so you can work during your weekends" is not what most people want.
The last few weeks though, someone tipped me off to: https://github.com/brainfucksec/neovim-lua
It's basially a neovim config that's not minimal, but very reasonable. You can install and all the LSP config just worked. I also found it very easy to configure and set up to my liking (added telescope, etc.)
If anyone out there is looking for a great base to start their own neovim config, try it out!
The above is my attempt to create a minimal Neovim configuration that uses treesitter and nvim-lsp (albeit only for Go).
It uses Nix, so if you have Nix installed you can immediately try the configuration out in a self-contained development shell.
It’s too minimal for everyday use, but could be of inspiration.
Will check if out though for sure, thanks!
Something like SpaceVim kind of makes it so someone doesn't have to concern themselves with that because someone designed the entire thing from the ground up so you're less likely to run into issues that someone who's gradually built up their vim config over time would. That isn't even mentioning the fact that it all hypothetically just works together and you can be productive actually programming out of the box with something like this.
I think for someone that is interested in using Vim (or Emacs, for that matter), these premade configurations with their own superset of paradigms seems like a much better approach to going about it. They can, after all, switch to building out their own config down the line if they feel the need or desire to.
The argument that they can still decide to do it properly when they want is not grounded in reality. People get used easily to those things so two things happen in those cases:
- they get very frustrated by the real Vim, - they try to replicate their previous ready-made config anyway.
It's all just some elaborate avoidance strategy.
This is not really the universal truth that you think it is. I remember when I learned to drive my father started me on his car with a manual transmission. I skipped gears, Started from a stop in 3rd gear, and had a whole lot of frustration trying to deal with both the concepts of driving the car, the rules of the road, and trying not to completely destroy the clutch of the car. I switched to learning on my mother's car, which was an automatic. I gained confidence on the road and then I went back to learning how to drive stick. This resulted in a much easier time for both me and the clutch. So no, I wasn't better off learning it directly. The same can be said for something like walking and then running, or learning how to program. They typically don't start students off learning to write Assembly even if their intent is to be an Assembly programmer. Training wheels on a bike exist for the same reason too. Can people make this approach work? Sure, but that doesn't mean it's better. In fact I think in quite a lot of cases it's way worse.
> they get very frustrated by the real Vim
They are using the "real" Vim. You being weirdly gatekeepy about this doesn't change the fact that they're using the same application that you are, except they loaded a config different from yours. There is a list of different keybinds from vanilla vim in their documentation and you can disable them with one line in your config. Pretty much all the typical vim paradigms are exactly the same.
> they try to replicate their previous ready-made config anyway.
kind of their prerogative and one of the nice things about extensible programs like vim is that people can do exactly that. I could change vim to use CUA commands, be mouse-focused, and default to insert mode and I'd still be using vim.
All of those examples are about prerequisites, though. You learned to use manual transmission in a car with a manual transmission, not in a car with an automatic transmission. You learned to drive a car in a car, not on the back of a horse. The person who learned Assembly learned it by doing Assembly. Etc.
> They are using the "real" Vim.
They are shielding themselves from "real" Vim.
> You being weirdly gatekeepy about this doesn't change the fact that they're using the same application that you are, except they loaded a config different from yours.
The config they use not only hides Vim behind dozens of plugins but also adds a few new concepts to the mix that they are forced to learn _on top_ of Vim's ones. What a waste.
> kind of their prerogative
Kind of mine to suggest a different path.
> They are shielding themselves from "real" Vim.
Define "real" vim.
> The config they use not only hides Vim behind dozens of plugins but also adds a few new concepts to the mix that they are forced to learn _on top_ of Vim's ones. What a waste.
It doesn't hide Vim behind anything. Extensibility is baked into Vim and a great deal of effort has been put into ensuring that it can be extended to suit people's needs. One of the largest changes in Vim 9 was working on increasing the capabilities and speed of Vim9 script. Whether someone writes their own config, doesn't use one, or uses a premade configuration like SpaceVim, they're still using Vim.
They trade time learning SpaceVim's paradigms in exchange for not having to configure vim themselves which means they can spend more time learning how to use Vim for getting work done rather than faffing about with plugins and designing their own keybinding schemes. If SpaceVim completely eschewed Vim paradigms for its own you might have a point but that's not the case. It very much adheres largely to how Vim itself works while making it easier for someone to get up and programming.
I found this was a good compromise because I jump around all sorts of systems and broken ass container hosts so any vi variant is home then.
If you keep your dotfiles (vimrc included) in a public repo, checking them out to every new system may become a useful habit. Or you can even do curl ...| bash to setup your work environment every time.
Pulling stuff out of GitHub regardless of the repo into a production machine should be frowned upon anyway.
You could pin your extensions in packers. Not sure about other plugins managers though.
- I work (or rather workED until a month ago) on LSP implementation for C++ (clangd) and I frequently need updates in the client - The client (Neovim LSP client) is being developed quite rapidly
For the reasons above, I did update the LSP plugins and Neovim versions quite a lot. And (in my experience) that is the thing that breaks the most over the past 2-3 years. Everything else is kind of OK, but it doesn't make much sense without the LSP. I could update only some plugins and keep the others at a fixed version, but then overall I'm not getting bug fixes & features which makes me kind of sad (that's why I started building my ultimate (Neo)vim setup in the first place).
I guess I should really stick to just a couple of basic plugins and throw everything else out.
It's not efficient for many different developers to each learn how to configure Vim to the point where they can get an effective editor out of it. - For this, a shared configuration / distribution saves a bunch of time.
It does make sense for developers to learn vi keybindings (so that they'll be able to use a vanilla vi in a limited environment), or to learn how to customise their programs for their particular situations.
To my understanding, the non-standard keybindings in distributions like Spacemacs provide are consistent, well thought out, and discoverable. (Which won't be the case with each ad-hoc customisation).
I do get the impression that Spacemacs (which I think inspired this project) adds a layer of abstraction too many, such that users who are stuck with Emacs might not have the capability to get themselves un-stuck without effort.
What’s the difference between someone who uses vanilla, unconfigured Vim and someone who uses unconfigured SpaceVim? Merely that one of them likes vanilla Vim and the other one likes SpaceVim. What’s the problem with not configuring things if you don’t want or have to?
Also the mock quotation thing is way overdone around these parts, jeez.
It is used by and marketed to both populations.
> What’s the difference between someone who uses vanilla, unconfigured Vim and someone who uses unconfigured SpaceVim?
As if those were the only possibilities.
> What’s the problem with not configuring things if you don’t want or have to?
No problem and no idea where that comes from.
The open source landscape of plug-in development is under constant evolution and it can be quite a time sink staying on top of the latest and best tooling.
I see SpaceVim as something similar to a Linux distribution. The maintainers offer the work of selecting various packages inversion combinations that harmonize into a consistent system.
And just like any Linux distribution you can agree or disagree with the packages they choose or the default configurations it comes with.
I end up using a somewhat heavily customized SpaceVim that I personally like but it's my opinion the distribution is a very productive foundation.
It had the potential of being all the great things of both SpaceVim + VS Code combined into a native app.
1. Rescript is not ReasonML/OCaml, it is a new language.
2. Rescript doesn't compile to native code.
Forks were being discussed, the creator didn't like the criticisms of his decision (which came as a surprise for most of the community), people didn't liked having the rug pulled out of their feet, aggressive comments were made, people were angry and the community got separated between web and native, both weaker than the united one.
TL;DR; The creator decided that his project was for web only, alienated the native developers out of the blue and shattered the community.
I wouldn't go so far as GP as to call it "drama", but the split left Reason without a reason (pun intended) to exist or any activity for that matter. Most of the people who liked Reason for frontend usecases moved to ReScript since that at least had some momentum behind it. Since the split, Reason itself has been largely on life support, with no significant changes and almost no forum activity in the past year. So newcomers to Reason see a dead community for a language which is a syntax extension for another language with a (relatively) alive community. The fact that Reason hasn't seen a surge in enthusiasm corresponding to the enthusiasm in the OCaml community with the advent of 5.0 and multicore is proof enough that Reason is dead, and projects written in Reason should probably consider moving to OCaml entirely considering there are planned changes to the OCaml syntax for effects which I don't think are going to make it to Reason.
Some people in the Reason world blame the ReScript people for this, which I think is entirely misplaced. The only reason (pun not intended this time) Reason has died off is that there is absolutely no clarity on the future of Reason. The creator of Reason, Jordan Walke, has been entirely MIA for about two years now. A version 4.0 was planned in 2020 and as of now hasn't come up. This issue was opened in Nov 2020 asking for future plans and is still unresolved, and the latest comment from a new developer just makes my point: https://github.com/reasonml/reason/issues/2634.
Also, rebranding instead of starting a new project sounds just like "it's my baby, I'm gonna kill the old project so no one that disagrees with my decisions can continue it".
> Some people in the Reason world blame the ReScript people for this, which I think is entirely misplaced.
I mean, the way that the creator of ReScript behaved on discord to any criticism to his decisions at the time didn't helped...
I think this is slightly uncharitable. The people working on BuckleScript had been unhappy about syntax for a while, and wanted to make it simpler for people coming from JS. They also kept supporting Reason syntax - it's quite literally in the announcement and forum threads from the time that old code will continue to work.
I can't speak to why the rebrand went down the way it did, as none of us can know for sure, but I think it might have more to do with internal communication between team members than any one person taking their toys and going home, so to speak.
> I mean, the way that the creator of ReScript behaved on discord to any criticism to his decisions at the time didn't helped
I didn't hang around on the Reason discord (for good reason, I now suppose :P) but I don't think that had anything to do with Reason dying out. No matter how the ReScript people behaved, Reason native could've gone its own way, but it didn't, and the responsibility for that is on Reason. As much responsibility as there is, ofc. I don't mean to imply that the team behind Reason should've continued developing if they didn't want to, I just don't think the ReScript people should be held to account for how Reason evolved.
(FWIW, I was interested in Reason only for native, and have zero interest in ReScript, so I say this as someone who is "on your side".)
Yeah, but as far as I remember the new syntax and all changes were discussed and developed behind closed doors and dropped like a bomb, I mean, it is their project and they could do whatever they want, but two points left a pretty sour taste in my mouth:
1. You know that there are a lot of native projects and your changes will cause ripples through the entire ecosystem, warning people would be nice, they have no obligation to do so, but they can't really complain that people were pissed about it.
2. The rename and using all the old bucklescript resources instead of passing these resources for the community and saying "ok, now we're working on ReScript, it is a new language that follows our long term vision for the future of webdev, follow us". They own the project, but they don't "own" the community.
> I didn't hang around on the Reason discord (for good reason, I now suppose :P)
Yeah, it wasn't a nice place.
As for reason dying out, most of the devs that embraced native ReasonML were also OCaml devs and tooling was being developed to facilitate the transition from web to native code with the more approachable syntax of reason (esy.sh and revery were two of these initiatives).
ReScript dropping support for OCaml was like "ok, no point in trying to bring web people to native now, let's stick with OCaml syntax, they aren't the same language anymore".
And as "my side", I did use Reason syntax in native just because I was already using the syntax in web projects, otherwise I would just write OCaml, but after seeing how the changes were announced I gave up on Reason for web and didn't even bother with ReScript, don't get me wrong, it is a really nice language for webdev, but I have no interest in waking up in a Monday just to discover that the language I'm using is being completely changed without any warning in the next week.
The cool thing about Bucklescript is that it generated pretty readable javascript, so dropping the compiler and working with the JS files was pretty easy, which is what I did with a project that I was working when the drama started, just used the generated js files and slowly replaced them with typescript when needed.
Speed or vim-like editing was not a selling point at all.
>I doesn't make much difference to me
Okay, but this is completely beyond the point.
Speak for yourself, those are why I supported OniVim. The GUI was not what was important to me, it was the ability to install extensions easily, have vim keybindings, and most importantly, be able to handle the very large files I often work with (due to being written in OCaml), where VSCode hangs.
Why are you so obsessed with this subjectiveness? I'm just saying that speed and vim-like editing where not a selling point. Because you can already have those in VSCode with neovim backing it up. Not to mention you could've already have speed and vim-like editing via projects like VimR (tens of them out there).
>The GUI was not what was important to me
>I thought OniVim would bring that^1 but it seems it is not anymore.
You are contradicting yourself here.
[^1]: "(neo)vim plugin installation still isn't as easy to work with as a one click package / language server install like in VSCode."
Regarding the plugin support, there is no contradiction. Rather than the words "one click" however, which brings to mind a GUI, I should have said Neovim has a more annoying plugin story (through packer which has a lot of configuration) than VSCode or OniVim, yet it is not the GUI that makes it so. If I could write in init.nvim "Plug TypeScript" just as in VSCode I could click "install" on the TypeScript extension, those are both equivalent to me, even as the latter is GUI based while for former is terminal based.
I have also been seduced into Kakoune's way of doing things although not enough to make the jump from vim, which I hate but can't live without.
Helix really hits that sweet spot of a fast work-out-of-the-box kakoune-style terminal editor. Time to make the jump.
As you say, updates are a bit rough. I've given up on updating,and periodically I just reinstall it from scratch (a fairly painless process, they did amazing at making it easy to install). I figure this is comes with the territory of a rapidly evolving package.
The Treesitter and LSP features give me real-time code intelligence that I had been missing, and has made porting python2->python3, especially with type annotations, so much easier!
I’ll give SpaceVim a shot. LunarVim is great, but it’s good to see what else is out there. I love vim in general, but I’ve found myself killing too much time fine-tuning/breaking my config. LunarVim more or less works out of the box and gives me what I want. I’m curious to see what SpaceVim has to offer.
I think these packages need to ship with homebrew or atleast some sort of an installer. Building them seems to be very hard for people who just want to use it, and not go down hacking rabit hole.
Usually it actually means the maintainer is trying hard not to make breaking changes (bumping the version).
Using the space bar to drive a text interface is a win over the stock emacs key chords, which wear out my left arm/wrist.
Vi's modal editing, once understood, is a general win, too.
Spacemacs blew my mind by setting up a Language Server Protocol (LSP) environment for python with almost zero effort. Not sure if SpaceVim is quite as broad in its feature set.
https://cloud.githubusercontent.com/assets/296716/25455341/6...
it has made me fall in love with vim much more than before. Thanks to the dev for putting so much effort on this.
Amazing project and maintainer. Donated to help the project!
I find that behavior quite despicable.