After learning this valuable lesson, I proceeded to learn to use Emacs.
After learning this valuable lesson, I proceeded to learn to use Emacs.
I chose to learn Vim, Emacs and other tools with a steep learning curve primarily because of their return on investment. They have great extensibility, so I can customize them exactly to my liking. I know that they won't radically change, or worse, disappear in a few years, as a lot of software does. So taking the time to learn how to use them is purely a selfish endeavor. I even put up with their quirks and shortcomings because of this, even though there might be alternatives that do feature X better, are faster, etc. Using these tools simply minimizes the chances I'll have to re-learn something else every few years. I'd rather avoid that.
One snap of the fingers in one of the many layers above us and million dollar projects succeed or fail. We are always a fancy dinner or business relation gone sour away from success or failure.
Vim or emacs come into play at layer 245 in the system and their impact on the final business reality is approximately 0,003%.
Who cares? One fire or war and a carpenter's work all comes crumbling down. Should he then not care about his work or his tools or materials and nail any old shit together? Life is what happens when you're busy making other plans.
Focus on what matters is my only advice. Hint: it’s not your editor.
But more importantly, I like Vim. It makes me enjoy the process much more. I do carpentry in my spare time, and I think of them much like I do my favorite carpentry tools. While they do enable some projects that otherwise couldn't have happened, most of the time their impact is just improving my experience and quality of output. That matters a great deal to me, regardless of whether it matters several layers up.
Why is that? If a tool is so simple that you don't need to learn anything about why does it matter how many people use it? There won't be a community for it because there's nothing to say. That would be learning about said tool which is the very thing we're trying to avoid.
Perhaps you were thinking ubiquity. But, in fact, the most ubiquitous text editor is probably vi/vim!
Are you saying there is no value in a tool having a large user base? The web and mobile app revolutions happened largely _because_ the software was accessible. If people needed to read manuals to learn how to use Facebook or TikTok, those projects never would've become popular. Microsoft and Apple built their empires on making operating systems easy to use. Obviously this is very valuable to many people.
If a tool is popular, it is more likely to be a sustainable income source for its authors, and thus more likely to continue to exist. Everyone benefits from that.
> There won't be a community for it because there's nothing to say. That would be learning about said tool which is the very thing we're trying to avoid.
A community doesn't just exist to discuss how to use a piece of software. It may consist of enthusiasts, discussions about program features or changes, value added services, etc. Besides, a community about the software itself is not required for it to be successful. Software can be popular just because people enjoy using it, and what it allows them to do.
> Perhaps you were thinking ubiquity.
No, I wasn't. I'm just saying that accessibility and ease of use are large factors in how popular a piece of software can be. Vi(m) had very humble beginnings and its growth was gradual over several decades. Yet it still pales in popularity compared to something like VS Code (see the Stack Overflow Developer Survey). Why do you think that is? Do you think Vim or Emacs will ever make it to the top of that list? What would need to happen for that to happen?
I'm not saying that chasing that metric is important. But there's safety in numbers.
I use both VS Code and Neovim, more or less interchangeably. I'm at a level now with VS Code where if a feature isn't exactly what I want or doesn't exist for a given language, I can roll a bespoke extension that scratches that random itch given ~45 minutes (for straight-forward stuff, longer the more involved things get). I'm not quite there (yet) with Neovim/Lua, so weirdly for me VS Code is the more easily malleable of the two.
Just a small anecdote: At work, I found it frustrating not being able to quickly locate where views for Django API endpoints were, so I wrote a simple extension that took the output of django-extensions' show_urls, parsed it, and displayed a quick pick list of all API endpoints, upon which selecting an endpoint would open the file and reveal the exact line in which the view for it was defined.
Implementing this did not take much effort (in fact, TypeScript and JSDoc make everything a lot simpler as it's clear to see what each function in the API does and what arguments they accept), and now this is something I use almost every day and greatly improves my satisfaction when navigating the codebase if not my productivity in general.
I have tried looking into implementing something similar in Neovim and came across the API for telescope.nvim[2], but found it a lot less intuitive to use. I do think Vim/Neovim shines when it comes to text manipulation and extensions built around it, but when it comes to more complex UI that often deals a lot more with graphical elements (e.g. tree views, hover text, notifications), it's hard to beat VS Code.
[0]: https://code.visualstudio.com/api/references/vscode-api
[1]: https://github.com/microsoft/vscode-extension-samples
[2]: https://github.com/nvim-telescope/telescope.nvim/blob/master...
(ThIs Is A jOkE)
But I'm giving neovim a chance now. I feel one part excitement for upgrading my developer UX and one part dread of getting stuck in endless rabbit holes.
Apps nowadays don't need a manual because they have very low density of information and very low density of functions. Engineers who refuse to maneuver anything without reading the manual first becomes rare. This is not completely bad because it means the living condition of engineers improved.