The downsides of using Vim
As software developers we spend a lot of time in a code editor, so it is important to choose one that you feel comfortable with and enjoy using. Vim (or Neovim in recent years) has been that choice for me. I love how it allows me to efficiently navigate and edit text while keeping my fingers on the keyboard. Other things that are crucial for me are its speed and the ability to run in a terminal (Seamless integration with tmux). I have been using Vim for more than a decade and have no plans on switching to another editor any time soon.
Nothing is perfect though; even Vim has its flaws. Let's have a look at some of these, based on my own experience.
Wasting time on configuration
One of Vim's greatest benefits is the ability to customize pretty much anything you can think of. If there's something you don't like, you can change it. If some functionality is missing, you can add it. There's always something to tweak or improve. However, this flexibility comes with a danger: If you're not careful you can get lost in spending endless hours on your configuration.
Reflecting on all the time spent configuring Vim, which I could have used to write code instead is kinda regretful. There have definitely been weekends were I planned to work on a side project, but ended up tweaking my .vimrc
file instead.
I do enjoy tweaking my configuration, so calling it a waste of time might be a bit harsh. It is time that probably could have been spent better though.
One way to avoid spending too much time on configuration is to use one of the open-source setups available, such as LazyVim. I haven't tried any of these myself as I'm quite happy with my current setup, but I do see the appeal it.
Plugins for everything
By default Vim looks like a very basic text editor. To get some of the functionality that is included in modern editors by default, you often have to rely on plugins. There are plugins available for pretty much everything you can think of. In the rare case you cannot find a plugin for something, there's always the option to write it yourself.
This provides a lot of flexibility, but it also means that all these plugins (44 in my case) need to be configured and maintained. It is not uncommon for one of the plugins to contain a breaking change after an update, resulting in me having to debug why my editor is not working as expected. Or guessing what is causing the cryptic error at the bottom of the screen.
More often than not are there multiple plugins available for the same functionality and deciding which one to use can be confusing. For example: Getting LSP and linting working can be quite a challenge due to the fragmented ecosystem.
Of course there is always the option to take a minimalist approach and install as few plugins as possible. No one is forcing you to install a plugin for everything. However plugins are essential if you're looking for a modern editor experience.
Using a different editor than your Colleagues
While there is a large online community of Vim and Neovim users, coming across a colleague that uses Vim as their default editor is not that common. Especially if you're working at a smaller company. Most people seem to be using VSCode these days. Of course this is not a huge problem and everyone should be able to use the editor they like. Pair programming however is much easier when both developers are using the same editor. VSCode has an extension that makes it very easy to have a remote pair programming session with another VSCode user. As Vim user you occasionally might have to be flexible and adapt to whichever editor your colleague is using.
Using Vim at work everyday, but not being able to share your passion for it, can sometimes feel a bit isolated as well. Please don't be that guy that keeps preaching to everyone about how great Vim is.
Vim motions don't work everywhere
Once you have the Vim key bindings engraved in your muscle memory, you want to use them everywhere. Unfortunately the reality is that we have to write text in a lot more places other than our text editors. During my job I have to communicate through Slack, write tickets in Jira or write a document in Google docs. Writing text in these places feels unnatural when you're used to Vim.
Sometimes I write the text in Vim first just to copy and paste it into the other text input. This is definitely not the most efficient way to do things. In a perfect world every text input field would support Vim key bindings.
Choosing the right editor
When deciding to use Vim as your editor, consider the points mentioned here. I've listed them as downsides, but they won't stop me from using Vim. I don't see them as deal-breakers, but they might be for you. Over the years I've adapted and learned to live with it. Moreover I believe that the benefits of using Vim by far outweigh the negatives.
I expect to happily keep using Vim in the foreseeable future. Every other code editor that I've tried in the past had its own set of problems; often much bigger than the ones mentioned in this article.
For me Vim (or Neovim) is still the best editor out there.