Neovim's biggest strength is personalization

2024-03-16 | Andrew Tiu

Some unorganized thoughts about Neovim.

Modal editing is a awesome, but I think how Neovim facilitates personalization is its biggest strength. Neovim’s commitment to extensibility lets me work the way I want. When I tried VS Code (currently the most popular choice) for a few months before switching to Neovim, I found that there were too many distracting menus, pop-up windows, and features that I likely wouldn’t use. Sure, I could Google around and customize things by finding the right JSON fields to change, but the results still felt underwhelming and limited. With Neovim, I have much finer control thanks to both its powerful Lua API and builtin Vimscript functions. I can keep things simple by just writing a few Lua functions to tweak behavior or quickly iterate on a full-blown plugin if needed; I get to choose the level of complexity.

It might seem counterintuitive to use Lua, a fully-fledged programming language, to customize your editor, but Lua turns out to be a great choice for an embedded configuration language. It’s simple and easy to pick up, meaning you can get moving very quickly, and again, you choose the level of complexity to reach for: build a few functions or go full OOP. Additionally, reading Neovim documentation doesn’t feel like a waste because the knowledge/patterns often transfers easily to other Neovim features. Eventually, you familiarize yourself enough with the API that you can likely guess which functions you need in a given situation. This feels much better than relying on obscure JSON fields and navigating through layers of dropdown menus to get things done.

While I’m happy that Neovim has been getting a lot of attention lately and more devs are willing to try it out, I think it’s important to remember that, at the end of the day, your Neovim config should suit your needs. Trying new plugins or following tutorials or walkthroughs of other people’s setups is great (don’t get me wrong; it’s important to share and learn), but you should be wary of shiny object syndrome. It shouldn’t be your goal to replicate someone else’s setup plugin-for-plugin or keymap-for-keymap. This undermines what makes Neovim so powerful: personalization. TJ DeVries (one of Neovim’s core maintainers) coined the term Personalized Development Environment (PDE), which aligns well with my thoughts here. His YouTube video is worth checking out. Because of this, I think kickstart.nvim is the best ways to approach Neovim. It strikes a balance between establishing a starting point and being unopinionated enough to let you explore without lock-in and setup Neovim the way you want.