As engineers, we often find ourselves stuck in the trenches of deadlines, features, and tech debt. It’s remarkably easy to slip into a monotonous grind, each day blurring into the next under the constant pressure of 'just getting things done'. In this cycle, we lose the initial thrill of crafting code and the dopamine kicks of solving puzzles, replaced by the robotic ticking off of tasks.
Though this was NOT quite my routine yet, I could feel it creeping up on me.
Enter NeoVim. "A text editor? How is a text editor going to help?" you might say. Well, more than just a text editor, it's a tool that injected a dose of unexpected fun back into my work life. More than just about embracing a tool for its functionality; it was about how Vim transformed mundane coding sessions back into engaging challenges.
It's clever keybindings and highly customizable features made each line of code feel like a small victory in a grand adventure. With NeoVim (nvim), what was once a daily grind became an enjoyable quest, reminding me that at the heart of technology, beyond the deadlines and demands, there's still plenty of room for play, discovery, and the ever-moving bar of optimization.
I kicked off my tech journey (like many) fueled by a mix of curiosity and eagerness to soak up every ounce of knowledge. As I navigated through various roles—from building UI libraries to complex systems and SaaS apps—I saw my toolkit expand, evolve, and change. I even built my very own VSCode plugins to help it evolve with me. But as the novelty wore off, the tools I relied on started to feel more like shackles than wings.
I found myself adapting my workflow to the tech, and not the other way around. This realization struck me hard; it seemed as though I was losing the joy that initially drew me into this field.
Coding was becoming a repetitive task, something to get through rather than something to savor. I was becoming a well-oiled part of the machinery, executing tasks without the creative spark that once ignited my days. I had to do something desperate...
NeoVim isn’t just a tweak on the classic Vim; it’s a total game-changer that takes the best of Vim and kicks it up a notch for the modern era. Born from a desire for more functionality and a smoother user experience, nvim injects new life into the solid base of Vim—known for its no-nonsense, efficient text manipulation, minimalistic approach, and inability to close.
In the bustling world of code and command lines, it stands out by integrating cool features like asynchronous job control. This means you can run all of the normal background tasks you've come to love (and face it, rely on)—think linting, auto-completing, and other nifty plugins
The plugin system? It’s amazing. There is a whole ecosystem of highly customizable plugins that cater to nearly every coder's fantasy. Plugins that transform your code navigation into a breeze or weave Git integration so seamlessly that it feels like it was always part of the plan (lazygit).
These plugins don’t just boost nvim's capabilities; they personalize it to fit your coding style perfectly, making your text editor distinctly yours.
Diving into Vims modal editing was like stepping into a whole new world. At first, flipping between editing, command, and visual modes felt like learning to drive a stick shift in a bustling city—clunky, a bit scary, and slowing me down more than speeding me up. But, fueled by stories of its game-changing efficiency, I buckled up for the learning process.
I started with the Vim keybindings plugin VSCode extension. This way, I could continue with what I knew best, and start dipping my toes into the bindings. I used a setting cycler and multi-command plugin to make it so I could cycle Vim mode (with relative line numbers) with a hotkey. I could then switch back and forth based on the urgency of a project.
javascript// Settings Cycler and Multi-commands (to set more complex key bindings) "settings.cycle": [ { "id": "lineNumbers", "overrideWorkspaceSettings": false, "values": [ { "editor.lineNumbers": "on" }, { "editor.lineNumbers": "relative" } ] } ], "multiCommand.commands": [ { "command": "multiCommand.cycleVim", "sequence": ["settings.cycle.lineNumbers", "toggleVim"] } ], "editor.lineNumbers": "on" }
I bound this action to ctrl + opt + cmd + v for quick snaps back and forth. I would do whatever I could in Vim mode, but if poop hit the fan, I would switch back to my normal flow.
Day by day, what felt awkward started to feel like second nature. The commands and keystrokes began to flow more smoothly (and I was looking at my keyboard less). The more I practiced, the more those initial bumps in the road smoothed out, turning daunting tasks into a sequence of (slightly more) nimble, precise actions.
I got to the point that the limitations of the Vim plugin and VSCode environment were slowing down my learning process and it was time to spread my wings!
shellbrew install neovim
With a robust ecosystem of plugins, a flexible configuration system, and plenty of videos, I began tailoring my editor to fit my workflow. I integrated tools that anticipated my needs (nvim-cmp), automated mundane tasks (chezmoi autocommands on save for dotfiles), and started to get everything running like a well-oiled machine.
I still had to jump over to VSCode a few times in the beginning while I was still learning the basics. But sooner or later I closed VSCode one day... and just never opened it again.
This journey through the learning curve wasn't just about mastering an editor; it was about rediscovering the joy of coding. Each session left me a bit more adept and a lot more inspired. The Vim ecosystem challenged me, rewarded me, and ultimately, transformed the way I interact with my code. It turned what was once a steep learning curve into a thrilling ride that I now can't really imagine being without.
The real charm of nvim is in how it bends to your will and needs. Imagine an editor that not only follows your commands but also. over time, adapts to your style—this is what makes NeoVim really stand out to me.
I jumped headfirst into my customization, learning and using Lua scripting and nvims APIs to dial in a setup that could get me into my flow state quicker, and keep me in for longer. Whether it was weaving in sleek task management solutions or tweaking the visual vibe with themes and key bindings, this customization journey turned my coding environment from functional to FUNctional.
Starting this way can add to your learning curve though. You need to learn how to overwrite "built-in" plugins and navigate the LazyVim ecosystem as well.
It goes beyond the basic stuff you can get from any IDE though. You can edit EVERYTHING to your exact needs. You can even easily fork plugins and adjust them to your needs if you want.
Vim did more than just revamp my workflow—it rekindled my love for writing code. Each time I get to zone out and dig into a repo I am not only building something, but I am also constantly further refining my workflow.
The more I dive into nvim and the lua community, the more it feels like I am rediscovering my tech roots—those days when every challenge was an adventure and every problem solved was a victory. I have that rush again, that sense of accomplishment and the sheer joy of crafting something great from nothing, for no reason other than I want to. It’s been like reigniting an old friendship where everything clicks just right, reminding me why I fell in love with tech in the first place.
As always, feel free to reach out to me by any means for more info, or if you just wanna talk tech.
Cheers