Posted by jxmorris12 1 day ago
I'm a VSCode user and when I hear people talk about neovim and it customizability or its productivity, I think to myself "VSCode is also very customizable and there's a lot of ways to get a lot of productivity out of it, why would I use neovim?".
Surely there's something I'm missing? Does it help you stay more in the flow or something? Is it because it's faster? Maybe it's because it's an editor you can easily use while ssh'd into a remote machine? Please enlighten me!
It's absolutely not for everyone, though it looks like some of the pre-built configs (NvChad, LaZyVim, etc.) are decent enough of the box now that you don't need to go on the endless-customization journey if you don't want to. To me though, that's the appeal: tinkering, tweaking, refining. Generally when people ask if they should use Vim, I tell them probably not but try it for a few weeks and see if it clicks in your brain. I had a great VSCode setup, everything worked great, I was productive, but something about Vim just made more sense to me once I got over the hump of modes and all the keymaps you need to turn into muscle memory.
Edit: I also like that I can do abominations like:
("def" @keyword (#set! conceal "ƒ"))
("if" @keyword (#set! conceal "?"))
("unless" @keyword (#set! conceal "¿"))
("else" @keyword (#set! conceal "∶"))
("elsif" @keyword (#set! conceal "⁇"))
("case" @keyword (#set! conceal "⟨?"))
("when" @keyword (#set! conceal "→"))
("begin" @keyword (#set! conceal "⌊"))
to make Ruby look absolutely insane. Is it useful? No. Do people hate it when I share my screen? Yes.
> I'm a VSCode user and when I hear people talk about neovim and it customizability
I think it's more customizable than vscode, but you need to learn some lua or vimscript to customize it. Back then I tried to create some custom keybindings in vscode and realized you can't add new ones, only modify what exists. While (n)vim provides you with out-of-the-box flexibility and more if you use something like LazyVim. > Is it because it's faster?
What I retroactively like about (n)vim is that, after the initial learning cost, it turns out the default nvim keybindings are transferable to many UNIX tools (less/more, man, journalctl, etc). It feels much more comfortable to write some code in nvim, open up a terminal, and then `man X` without mentally switching the keybindings. > Maybe it's because it's an editor you can easily use while ssh'd into a remote machine?
Actually, rather than nvim itself, it's more like vim is already preinstalled in many popular server distros. It's sometimes a huge time saver in cases where you're unable to install additional packages to edit some config/code/text files, just type `vim`/`vi` and you're good to go.I did convert myself from a minimal vscode setup (disabled everything & only LSP extensions) to LazyVim nvim a few months ago. I had to tweak my .config/nvim, relearn Lua again, and read the manual. It took me about a week to settle things down and get used to basic nvim bindings.
After another week of suffering trying to fix JDTLS (Java LSP) integration, I'm enjoying my nvim setup. Unlike vscode sync which requires you to login, I could just git clone my `.config/nvim` and I'm good to go.
Meanwhile with vim I often add one or two lines to a local vimrc script which adds some project-specific command or keybind. For example - take ioctl name under the cursor, translate to the handler function name and open corresponding driver file in split view. It only saves a couple seconds but makes it so much more natural to analyze code. I have no clue how I would go about doing that in vscode.
Also question: is there much of a reason to switch to neovim after learning vim motions in vscode?
But here's what I learned after a long time trying different things and what's worked.
Don't try to find objective reasons for making big shifts in your workflow - be that a change of your major tool, language, technique, or paradigm. What I mean is: don't try to decide if any concrete tool would be good for you. Instead, try to understand the big underlying idea behind the tool. Once you comprehend the abstraction, choosing a concrete implementation of that idea wouldn't really matter - you can carry the big idea with you regardless of one concrete implementation.
In practice, here's what I mean: the idea of vim-navigation is absolutely beautiful, pragmatic, and fantastic, and it's positively worth every minute of the initial learning curve. It's really not that hard - it only requires just a bit of dedication and discipline. I honestly don't understand programmers who choose to be in this field, yet outright reject the mere idea of it after trying it for like six minutes.
Just go with it - you probably will hate me, everyone else in this thread, and yourself for a few days, but then it will grok. Once you have a good understanding of its tenets, you could easily take it to whichever medium you choose to stay in and it doesn't even have to be neovim.
Neovim might be great for you, and maybe not even as a concrete tool to achieve defined goals, but even as a head-start medium to understand the 'big idea' of vim-navigation.
Finally, whenever picking up a new thing, maybe don't try to find elevator pitches. After the initial acquaintance - Wikipedia, GitHub pages, etc. - google instead: "Why does [that thing] suck..." and maybe try instead to find compelling reasons to remain skeptical. Trying to remain unconvinced may help you find perspectives for why a certain idea is a matter of fact might be a good one to have in your pocket.
What is the 'big idea'?
"Text can convey ideas with a precisely controlled level of ambiguity and precision, implied context and elaborated content, unmatched by anything else."¹
Vim-navigation provides a mental and spatial "language" that enables efficient text manipulation through keyboard input. Rather than forcing your brain to process raw character chunks on the screen, it allows you to reason about text in meaningful units: letters, words, paragraphs, tags, nested structures - e.g., "delete everything between parentheses" - and more.
Sadly, we keep moving away from plain text conventions, making our work increasingly complicated. Have you ever tried quickly extracting text interwoven with code from Slack into your editor? Ever gotten mad when websites won't let you copy the content or use colors and fonts that make it unreadable?
I implore every programmer to reject the status quo and reclaim agency over text interactions - always find ways to deal with text on your own terms. For instance, I'm reading this thread and typing this very comment in my editor. Why wouldn't I? It has all the tools I need for it - vim-navigation, thesaurus, dictionaries, translation, etymology lookup, LLMs, and tons of other tools.
Final point: do not assume code is somehow different. Code simply is structured text. Don't try to find perfect "code editor", prioritize plain text. Good plain text editors are the best code editors, but even the most sophisticated IDE at some points brings mostly frustration if it cannot nicely handle the simplicity of plain text.
___
¹. Graydon Hoare. Always bet on text - https://graydon2.dreamwidth.org/193447.html
but it’s like learning to play the piano, it only feels natural after years of practice
nowadays I’m faster with Cursor so it doesn’t matter as much
Neovim worked the same just about everywhere and I could choose my terminal. Especially with tiling, for me it's just feels better.
The big advantage of vim/neovim is that you can do everything in the keyboard and it can be very efficient. It is also lightweight.
However the learning curve is massive IME. I don't like either and pay for Jetbrains tooling.
It's literally stated in the second paragraph: "It’s how I learn." You can learn how the things around you work by tinkering with them.
Of course, you can then ask why someone would want to learn things, or why they enjoy learning, and I honestly don't know how to explain that, but I feel like it's the sort of thing that shouldn't need to be asked.
My goal is to de Google with home nas hosting a bunch of services. I want to take all my Dropbox photos and recreate what Google memories does using off the shelf AI tools on my nas. Then email and finally maps with great PoI data.
Probably not all of what I did is a differentiator that put my learning beyond mediocrity. But a good yard stick is if what I built is useful to someone and even better if one would pay me for something.
I actually really liked the look of the blog. It gave me a retro vibe, which is obviously what he was going for. But I'm also reading on my phone. Maybe the choice was more annoying on a larger screen.
Tinkering habit is kind of important as even small interactions help to build an internal model of how things work, how to operate them, etc. And this model might generalize.
How did you develop your sense of taste in code? Any stories or lessons worth sharing?
And while I'm talking about artistic quality on HN, I have to take some obligatory potshots at the website in question. When I have to use Safari's reader mode to see what you wrote, something has gone terribly wrong.
> And what I mean by taste here is simply the honed ability to distinguish mediocrity from excellence. This will be highly subjective, and not everyone’s taste will be the same, but that is the point, you should NOT have the same taste as someone else.
Concisely, discernment.
So your comment about “artistic quality” may apply. But from your ends sentence It seems you equate “artistic quality” to aesthetics , and I don’t think that’s what the author intended.
If you could indulge me a bit, the author in me wants to be pedantic about this. :)
In my defense, changing the definition of a term at the end of the article is begging to be misunderstood.
Lost me here. If tastes don't converge in the limit, then there's no point and you're just justifying a hobby.