Karnell Schultz

How using Vim leveled me up as a developer

When I first considered learning and using Vim, I had this notion that dedicating time to mastering it would detract from my ability to learn other technologies. While that’s true—there are only so many hours in a day—I had no idea how much I would learn and how it would elevate my skills as a developer.

Part of growing as a developer involves mastering your tools. While learning all the options and shortcuts in Zed or VSCode can take you far, it doesn’t compare to the depth of understanding that comes with learning Vim. For instance, a beginner learning JavaScript can make significant progress using VSCode or Zed without ever grasping what a Language Server Protocol (LSP) is or how it enhances their coding experience. In contrast, setting up LSPs in Vim requires you to manually install and configure them, exposing you to a wealth of concepts and tools like TreeSitter, code completion, themes, and buffer searching.

As a NeoVim user, my configuration files are written in Lua. This necessitated learning some Lua to customize my setup. Previously, I only knew Lua as a scripting language used in game development, particularly in games like Roblox. However, after diving deeper into Lua, I began writing a few scripts for work. While I could have used Go or JavaScript, I found writing in Lua to be more enjoyable and engaging. This created a feedback loop: the more I wrote in Lua, the better I became at updating my Vim configuration and manipulating Vim itself. I’m by no means a Lua expert, but it’s now another valuable tool in my developer toolkit that I look forward to using.

I’ve also changed how I navigate my projects. I no longer rely on a file tree as I did in Zed or VSCode. This shift has forced me to become more familiar with my project structure and file names. To find files, I use Telescope, opening it up to fuzzy-find the files I need. This approach has significantly improved my mental mapping of where files are located and how they relate to one another. That said, I sometimes crave the familiarity of a file tree, which led me to discover a NeoVim plugin called Oil.

Previously, I kept a terminal open for tasks like running Git commands and development servers. Even though iTerm2 was always open, I can’t say I spent much time in the terminal or became particularly adept at using it. However, since I now spend most of my time in the terminal, I find that my skills are improving. Because Vim operates closer to the metal of the computer than an IDE, it creates smaller leaps in understanding how to accomplish tasks within a terminal window. For example, since Telescope uses grep to help find files, I’ve learned to reach for grep when needed, broadening my problem-solving toolkit.

Am I a 10x developer now that I use Vim? Not quite.

In fact, I might be the same or even a tad slower for certain tasks in Vim, as not every action is ingrained in my muscle memory yet. When I need to move a bunch of files around, I still open Zed and drag and drop like a madman. I haven’t yet explored effective ways to do this using the terminal or Vim.

But am I enjoying the process of learning more about the tools I use every day? Absolutely.

I’m committed to continuing my journey of leveling up my Vim experience and, in turn, becoming a better developer.