Most of the things I do with Neovim I could probably also do with VS Code (not sure about autocommands and macros though, I haven't used Code in years). I don't use a mouse much, I have a very keyboard-centric workflow. I was a Code user for years, but did most everything else in the terminal. I figured I would give it a try and I ended up just liking it. I like to tinker. I like to tweak my configuration. I like how I can set autocommands for things, pipe text into Vim and manipulate it, or record a quick macro for some repetitive task. I like that there are "Vim keymap" plugins for things like Firefox, so learning basic Vim keys has helped me outside of Vim. I like that I keep discovering new things Vim can do (and then promptly forgetting them most of the time, but still). I also like to spend 2 hours writing something to automate something that saves me two seconds.
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'll second the enjoyable parts of Neovim shared above, and add a few more of my own:
- vi uses most of the same default keybindings, which is available across most distros (in busybox). Meaning I can use the same keybindings in a docker container, appliance server, etc.
- With the conform[1] plugin, I can add any CLI code/text formatters that might not be available as a vscode extension. As long as it takes a file/stdin and outputs a file/stdout.
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.