A Scandinavian Developer
Published on

Neovim

Before I got into programming I used to study jazz guitar, and during my studies my teachers encouraged me to obsessively focus on the fundamentals above anything else. This involved getting an expressive tone from the guitar by applying different kinds of pressures to the strings and practicing intensely with a metronome every time to develop a great solid sense of time. They referred to this as building the muscle memory and argued that this would eventually make the instrument feel like an extension to my body, making it seamless to turn thoughts into beautiful expressive tones. I applied those lessons, and after a few years things started to feel magical. The instrument felt like putty in my hands, and things just flowed. Thinking back I’m filled with nostalgia just thinking about that effortless relationship and the instrument.

While I didn’t manage to become a professional-level player these lessons stayed with me: focus on the fundamentals and build up muscle memory to achieve an effortless relationship between yourself and the tool at hand.

Earlier this summer, I picked up an old classic: The Pragmatic Programmer. In one of their chapters, they cover the importance of becoming a master of your most basic tools like a carpenter would. For a programmer, this means getting intimate with your shell and text editor. When reading this chapter I was reminded of the lessons I learned during my musical studies and the pursuit of making your instrument/tools feel like a fluid extension of your mind by building up strong muscle memory. Things should feel effortless at every turn, and you should be able to easily turn thoughts into action without any friction. From that moment I’ve been mildly obsessed with chasing the feeling I used to get when playing the jazz guitar but this time focusing on the core tool of a programmer: the text editor.

Enter: Neovim.

I’ve been Vim-curious for quite a long time but admittedly have had a couple of false starts. While it’s fairly easy to get the hang of the basic key bindings, I struggled with integrating it into my day-to-day workflow. I never quite reached that point where I felt truly productive. The steep learning curve, especially around configuring everything from scratch - choosing a package manager, understanding the plugin ecosystem - was my biggest hurdle.

But this summer, things finally clicked. I got over that beginner hump, and here’s what helped:

  • I stumbled upon Lazyvim after a tweet from DHH. This was huge for me, because I could get started in minutes with a decent setup, instead of spending hours upon hours trying to understand how to configure everything from scratch and finding the best plugins to use for my day-to-day workflows
  • I found LazyVim for Ambitious Developers - an excellent free online book on all the things you need to know to get productive with Neovim and in particular LazyVim.
  • I started binge-watching Neovim content from typecraft, which offers excellent, approachable introductions to customizing your Neovim setup, with a bunch of great plugin recommendations.
  • Lastly, I was on paternity leave this summer. While that didn’t leave me with much “me time”, I did manage to carve out two 30-minute blocks during nap-time. I used this time as dedicated Neovim practice time, and the spaced repetition practice time had a tremendous impact on my Neovim chops. Like in music, this type of spaced repetition is the best way to build up the muscle memory.

By the end of the summer, things finally started to feel magical. Writing code in Neovim became a breeze, and the sheer power it brings keeps me motivated and excited to keep on learning and incorporating all of the techniques you can do to automate the boring stuff and speed up your workflow. Coming back to work after my paternity leave, I can proudly report that I’m a full-time Neovim developer now, and I haven’t looked back since. While I’m not an expert in any sense of the word (yet), I’ve gotten to a state where I feel truly productive, and that feels awesome.

I’m excited to keep pushing the boundaries of what Neovim can do, whether it’s finding new plugins, optimizing my workflow, or just getting that little bit faster at the basics. There’s still so much to learn, and that’s what keeps me coming back. It’s like playing the guitar—no matter how good you get, there’s always another level to reach, and the journey is half the fun.