This question is a bit too broad and opinion based, but I'll still write an answer here (rather than essentially do the same in comments.)
A lot of the hype around Vi/Vim is on its modal interface, where you get a very rich set of motions, commands, text objects, since you have all keys available (they don't insert outside of insert mode) to implement a wide range of very specific motion and editing commands.
The second advantage of the modal interface of Vi/Vim is composition, which allows you to put together different editing commands with different text objects and add an optional count or a few modifiers, to very effectively act on specific blocks of text. You're able to do all this efficiently without using a mouse or arrow keys, so your hands don't have to move a lot, reducing strain and allowing you be quicker while moving around, editing and typing.
While there's an upside here, there's also a downside in that the Vim modal interface can be quite daunting to a beginner and contributes to the steep learning curve of Vim. It's very efficient once you're proficient in it, but it takes a lot of effort to become really proficient...
(Note also that you have extensions implementing the Vim key bindings and modal interface in most modern IDEs, so you can get this benefit elsewhere without having to switch to Vim.)
Second big feature of Vim/NeoVim (much more.than the original Vi) is extensibility through the built-in Vimscript language and through its plug-in subsystem.
It's "easy" to customize Vim and you can just write mappings, commands and functions to your vimrc and have them readily available. You can "easily" turn them into plug-ins you can share. There's a very rich ecosystem of plug-ins doing everything from external command execution, asynchronous linting, completion, fuzzy finding, directory browsing and more. You have plug-ins introducing additional motions and text objects, snippets. Also plug-ins for language support, with custom syntax highlighting and indentation.
A lot of Vim itself is defined in Vimscript, so you can customize a lot without requiring patches in the C code of the core or to wait for new features to be shipped.
There's a downside here, in that Vimscript is a language full of quirks, starting even with how certain characters are allowed or recognized differently in specific contexts. (Strings can use double quotes, but "
is also used to introduce comments. |
is the command separator, but some commands consume it and use it as an argument instead.) Not to mention that it's one more language you have to deal with... NeoVim is switching to Lua as a primary language in plug-ins, but it somewhat feels that now you have to deal with both Lua and Vimscript, so not sure how much easier that is right now...
(Note also that modern IDEs typically support extensions too, so you get a lot of this rich ecosystem there too. I guess the main difference here is how with Vim plug-ins are essentially just a continuation of your vimrc config, so it's somewhat natural progression for you to write them as you learn more and become an expert on Vim/NeoVim, while with IDEs it's perhaps not that much exposed to users of the IDE.)
Third big feature of Vim is being lightweight and ubiquitous. It's very lightweight in being very fast to start up. It's very responsive while editing text. The fact that it works well on a terminal (and that's probably the UI of choice of most Vimmers) means you can easily use it through SSH on a server anywhere. The modal interface is also.quite helpful when there's latency in your connection, as you can type ahead and your brain figures out where you're moving precisely, you don't have to count how many characters there are to press the arrow keys that exact number of times...
Vim is also very ubiquitous, especially nowadays when Linux is the platform of choice for servers, the cloud and containers. Vim is pre-installed on virtually every Linux server and cloud instance and many container images ship it too. Even when it's not there, it's usually easy to pull it in. On the desktop and laptop, the popularity of Mac OS (over Windows) in the last decade means it's also shipped by default there too. Out of the box, you get a decent terminal and a working version of Vim you can already start using right away. And if you're on Windows (or even an old Unix box like AIX or HP-UX), you can get installed and running there too.
The fact that your config is all made of a directory tree of text files makes it easy to bring it with you anywhere and automate setting up Vim for your particular preferences.
Having said that, one downside here is that if you get very specialized into Vim, setting it up just right can get quite involved. Even color schemes sometimes (often?) involve coordinating the color scheme of the Terminal with that of Vim. You're likely to want to upgrade Vim to the latest version and install Vim with additional support for Python, Ruby, Lua, so your plug-ins that require those features will work. Vimmers will also often configure their keyboard differently so they have control keys available elsewhere (like remapping the Caps Lock key to Escape or Control.) And don't get me started on clipboard integration 😂
In conclusion, these are the three primary features that make Vim attractive to me over an IDE:
- the modal interface
- extensibility and the rich plug-in ecosystem
- lightweight and ubiquitous
To some extent, you can get a few of those in modern IDEs, particularly Vim keybindings and the modal interface will be available in virtually every modern IDE. Most modern IDEs support extensions and offer a wide variety to select from. On being lightweight and ubiquitous, I think Vim still wins hands down, but perhaps that's not as important a requirement to everyone. (It happens to be a big one for me.)