I Don't Use Neovim, btw
My roller-coaster week swapping from JetBrains IDEs to NeoVim - and then back.
I don’t want an IDE. I don’t want the editor to write code for me. I want a text editor. I want to interact with characters, directly. And NeoVim allows me to do that in some ways that are even better than TextMate.
I Was A JetBrains Boy
In general, there are two types of code editors - IDEs (Integrated Development Environments) and text editors.
IDEs are like the PhotoShop of code editing. They are big, resource hungry, but also powerful, gorilla-like programs.
Text editors on the other hand are simple. They excel in one activity - editing text. They don’t provide power-tool features like an IDE - and that’s the point.
A programmer will have one of these tools, which I’ll refer to as editors, open on their computer for the entire day at work. Along with the computer itself, an editor is the essential tool. Editors are to programmers what video editing software is to video editors.
Since programmers are an opinionated bunch, and since we keep these editors running almost always, there is a great debate about which type of editor and which editor within that category is best. The debate focuses around whether it is better to use an IDE or a simple text editor.
I’m stuck between these two sides. I love WebStorm, a heavyweight web dev IDE by JetBrains. I love the refactoring tools, the integrated test runners, that sense that the editor is smart and that I’m working with a big tool for a big job. Why would I bring a hammer to work when I have a nail gun?
On the other hand, I also love the idea of a simple text editor forcing me to hack it with nothing but my mind and a keyboard. Coding with a text editor is an adventure where wits and courage differentiate over money and tooling.
When it comes to text editors, choices abound, but NeoVim takes the crown as the most configurable, most loved, and most revered. NeoVim is based on an ancient editor called Vim. Vim is not widely used anymore but did happen to invent an incredible set of lightning-fast and oddly intuitive keybindings that make the simple task of editing text fun and nearly mouse-free. It’s hands on keyboard and nowhere else! This is the joy of using NeoVim.
Lucky for me, JetBrains editors come with a plugin to bring those keybindings to the JetBrains experience. And for many years, this combination of Vim keybindings and JetBrains power-tooling kept me happy.
I Got The Neovim Itch
But, after listening to DHH and Lex’s podcast I got an itch to change. Something was getting stale and I needed a new experience. And I knew what it had to be - Neovim. The way DHH talked about it was so enticing and romantic - I knew I had to give it another shot.
I had tried it once before. About a year ago, I downloaded a distribution for NeoVim called LunarVim and tried my hands at the text editor experience. I couldn’t do it. I wanted all the IDE features so bad. I hadn’t realized how much I depended on them. This time, I was going to do better.
Instead of installing a distribution, which comes pre-packaged with a ton of plugins already installed to make it a little less archaic, I downloaded the plain NeoVim and decided to configure it myself.
You can configure Neovim to do almost anything you want in exactly the way you want it. It’s extraordinarily configurable. And that configurability is both a curse and a blessing. Part of it means that the native Neovim experience is very bare bones. If you want a feature in your editor, it’s probably up to you to add it.
Luckily, there’s a huge set of open-source plugins for Neovim that require the user to write code configuring the plugins. You want to make bit of text highlight when you copy it? Can do. Want to open a window when you press ctrl-\? Can do that to. Want to run tests when you hit rt? Yup. There’s one catch, using the plugins involves the user writing configuration code that runs the plugins. And herein lies the problem - it’s more code for me to own. Now I own code for the program with which I am writing more code. It gets meta really fast.
But, I wanted the speed. I wanted to customize. I wanted to say “I use Neovim, btw.” So I installed Neovim, and for a week I have been trying and mostly failing to configure it the way I would like.
Despite the struggles, I had fun configuring Neovim this week. Really, I did! The Lua code is self-explanatory. The plugins are vast and powerful. The flexibility is astonishing. By Wednesday I had a handsome-looking editor which I was quite proud of. I even had tabs which I could switch between in a breeze. When I got the tabs working I did a little dance in my office - it was fun!
The Struggles Begin
Shortly after this point, things started to break for me.
I realized that I wanted groups of tabs for multiple-project editing - a feature I get with WebStorm. That’s another plugin. The tab plugins didn’t play nice with the file explorer plugin so I had to fix it.
Then, I wanted a way to run my tests from the editor like I can in WebStorm - I never got that plugin working.
I wanted an easy way to manage my Git version control - like I have in WebStorm. And that was yet another plugin.
The plugins piled up and started breaking one another. I started pulling my hair out.
Can you see the theme?
The truth is, I’m not a Neovim user. If I was, I’d configure it just like I have WebStorm already configured. I like all the things that Webstorm gives me. Yes, WebStorm eats up RAM. Yes, it starts up slowly. But at least I get version control, tab groups, pinned tabs, test runners, a file explorer, integrated terminal, and all the rest - without having to create it myself. So, I’ve given up on Neovim for now. After realizing that I wanted all the same features WebStorm has but in Neovim, I decided to just keep using WebStorm.
For those who say, “but WebStorm costs money!” Yes, yes it does. And it should, because it’s a great product! I have no qualms spending the money required to maintain my JetBrains product pack license. In fact (don’t tell JetBrains this, please) I’d be willing to pay them more than I currently do! Considering my hourly rate as a programmer and the amount of time I spend with their tools, it’s a small price.
Still, I wish I could program with the Neovimmers - they are a different breed. DHH said in his podcast with Lex Fridman that he doesn’t want an IDE because he wants to feel every keystroke and craft beautiful code one key at a time. It sounds sexy, I admit. But, that’s not me.
Not today, at least.
I've been diving into vim more recently. I share the same sentiment that it can get pretty complex the more you try to make your editor experience the same as any paid offerings like JetBrains. What made the switch more palatable was that my reason for changing was simplicity. So I didn't install very many plugins. I use netrw for my filesystem navigation in vim. I only have a theme plugin (Catppuccin is great) and a git toolbox plugin for identifying commits and changes more easily. I steered clear of unsupported or inactive plugins and tried to be as vanilla as possible while still being productive. I believe I struck a good balance for myself and will continue to use vim more often, though there are just some things that I like to fallback on JetBrains or other IDEs for.