Vim Plugins Revisited – Neovim 0.5 Edition

Over 6 years ago (!) I wrote a little post here about the vim plugins I found most useful. In honor of the Neovim 0.5 release last week, I thought it would be worth revisiting my plugins of choice, and reflect on how they've changed over the years.

Neovim 0.5 is really a game changer in a lot of ways, and its impact on my setup has been significant. Native LSP support and treesitter integration are two of the exciting headline features, but in my mind, the biggest game-changer is the first-class support for scripting everything in Lua. Many of the plugins I've migrated below are fully implemented in Lua, and it's amazing to think that the community is just getting started in harnessing a "proper", and much faster, built-in scripting language.

Version control integration

Then: gitgutter
Now: gitsigns

Gitgutter served me well for a very long time! However, with gitsigns the VCS feedback appears much, much faster, and that was reason enough for me to switch. I also prefer its more understated use of the sign column.

Diagnostics

Then: Syntastic
Now: nvim-lspconfig

I have to give a shout out to ALE and coc-nvim, two great projects that I used for long stretches over the last five years. But as far as I'm concerned, Neovim's built-in LSP integration is absolutely the future in this space. I'd been cautiously kicking its tires before it was stable in 0.5, and ended up switching earlier than I'd anticipated thanks to the phenomenal performance increase over coc.nvim.

Syntax Highlighting

Then: vim-polyglot
Now: nvim-treesitter

Another performance-related switch here, based on a new feature in Neovim 0.5. I have only scratched the surface of what the treesitter integration has to offer, but am also excited about features like language-aware text objects. Again, the future in Neovim is really bright now that these tools are in the hands of an active development community.

Autocomplete

Then: ???
Now: nvim-compe

Hard to believe I used vim for years without decent autocomplete. Sorry, vim curmudgeons, but modern editors have raised the stakes here, and the built-in Omnicomplete just doesn't measure up anymore. nvim-compe is snappy (thanks in part to Lua) and has a configurable list of sources (including, most notably, neovim's LSP client). I don't quite have the snippet support set up to my liking yet, but in every other respect it's been a great experience so far.

File finder

Then: Ctrlp.vim
Now: fzf.vim

Looking at the list of file finders in the original post was quite a trip down memory lane. Again, I switched to fzf eons ago, and I think the killer feature for me, besides the speed, was having the same file searching available in the shell. There are fancier new options available like telescope.nvim, but after a cursory exploration I've decided I'm quite happy with my trusty FZF setup.

Grep frontend

Then: Ags.vim
Now: CtrlSF

I've been using CtrlSF for ages as well, as a UI for grepping across a project (via the spectacularly fast ripgrep). It's modeled on Sublime Text's project search, supports editing multiple files via search results, and is fairly customizable.

Wrap up

My full init.vim is up on GitHub, with a few other miscellaneous plugins and supporting config. Notably, I've started moving some of my more involved keybindings and supporting functions to lua modules. I'm still far from a Lua ninja, but compared to vimscript, making these kinds of customizations is significantly easier.

To some readers, spending years customizing a text editor probably seems frivolous, an extravagant waste of time. Why not just use VS Code? I can understand that perspective, but also derive a deep satisfaction every time I'm able to sculpt the digital environment where I spend hours each day in a way that fits my brain better. I'm very much looking forward to further exploring the new sculpting tools in Neovim 0.5.