I Went Back to Vim

Just when I thought I was done switching editors, I had a pretty uncomfortable interaction with one of the most important Neovim core maintainers. I don’t want to go into great detail about it here, but if you really want to know, just look at this issue.

After reading extensively about the issue, doing some soul-searching, and giving it careful consideration, I decided to redirect my financial contributions and put effort back into getting cozy with Vim 9.2. This wasn’t that hard for me to do as I had already been experimenting with vim9script since it made its official debut! I’m a developer first and a DevOps person second, so my vimrc is geared toward providing IDE-like features.

Many people may have assumed that Vim has been left “in the dust” by Neovim, but I am happy to tell you that this is not necessarily true. This is in no small part thanks to the Neovim contributors who backport their efforts into Vim, but also, the concerted effort to make vimscript evolve and the slower contributions from people involved in Vim. However, the Vim experience won’t be a 1:1 match for Neovim. Neovim has many features Vim doesn’t. With the right mindset, you might find that many of Neovim’s perks are just vanity.

Some recent improvements in Vim:

My Strategy for Using Vim

To manage plugins, I’ve chosen to just use Vim’s built-in package support and git. I don’t really see a need for anything else. You just add your plugins as git submodules in the ~/.vim/pack folder and voila! Plugins managed. You can even use submodules to quickly update your plugins.

For example, if you wanted fugitive, you could just git submodule add https://github.com/tpope/vim-fugitive. Commit your changes, then on another machine run git submodule init and git submodule update to get all your plugins back after a git pull. To update your plugins, do something like git submodule update --recursive --remote.

To achieve useful IDE feature parity with Vim, I rely heavily on Conquer of Completion, or colloquially Coc. This plugin handles the Language Server Protocol (LSP) heavy lifting for me. While it’s regarded as one of the “bloated” choices, I see real value in being able to meet LSP server plugins where they’re already at: NodeJS.

For the rare case where I need a debugger, I can use vimspector.

Honestly, Coc covers so much ground and is so convenient that I need very little configuration to get it going. I also haven’t personally felt a problem with the NodeJS runtime nor any problems with the speed of its features in Vim itself.

I use a few other plugins to enhance my “IDE.” Some favorites are:

If you’re curious enough, you can see my vimrc here.

Tags: