I finally switched to vim - and it took me only 6 years to learn it.

When I was about 16, I watched @realGeorgeHotz streaming. Terminals filled the screen, his cursor darting everywhere, yet always landing exactly where he needed it. The mouse? It wasn't being used at all.

I was impressed. I had never seen anyone code from a terminal window before, and as a VS Code user, I had never been that fast when writing code. At that moment, I knew I had to use whatever George was using. I knew I wanted to reach that coolness level - little did I know that I would be able to do it only after almost 6 years.

By asking around, I discovered he was using vim. But not just any vim—he had this intriguing "0 plugins" philosophy, not even an LSP. As I got deeper into the rabbit hole, I stumbled upon the concept of "unix as ide." — I was hooked.

This is where my vim journey began.


Making first contact

I google how to install vim on my machine and quickly find out that it is already preinstalled. Filled with excitement, I run "vim" in my terminal, and there it is.

But within seconds, I realize everything feels strange. I can't type, I can't figure out how to open a file, I can't do anything.

Frustration sets in, and I decide to close it. However, I don't even know how to do that. I end up searching for the famous "How to close VIM" question on StackOverflow. To my surprise, it has millions of views. At least I'm not the only one who is confused.

I google around a bit more and find out about vimtutor.
I try vimtutor, and things start to make sense. I am now able to type a little and move my cursor around using hjkl.

I rush through vimtutor in less than a day. Even though I still feel confused, I believe that with practice, I will get better. The keystrokes are hard to remember, and hjkl feels strange. The different ways to enter insert mode puzzle me—when should I press "i" vs "I"? Why does deleting something overwrite my clipboard? How do I jump around more efficiently? I am slow and I hate it, I want to be fast.

I try again the next day. Although I feel frustrated because I can't remember anything from the day before and have to redo vimtutor, I remain optimistic. With persistence, I know I will eventually master it - at least that's what they all say.

I give up on it.

A second chance

It's five years later. I'm now a professional Software Engineer, and my passion for writing code has become my career. I write code every day and am a huge fan of IntelliJ. I use it for everything—front-end development, mobile development, and back-end development (not Java). It's amazing. Life is good.

However, I still feel like something is missing. I still use my mouse when coding and I'm not part of the cool vim users club. I know a bit of vim and can edit files on a server occasionally, but not enough to replace IntelliJ. And not enough to earn the "I know vim" bragging rights.

Trying vim again is a thought that lingers in the back of my mind, but the overstimulation I felt five years ago still haunts me.

I stumble across @ThePrimeagen streaming. I notice he's using vim, and memories of my own attempts from years ago come flooding back. Watching him effortlessly jump around code and use crazy shortcuts, I realize he's a dedicated vim fan, unlike others cough @realGeorgeHotz cough, who switched to VS Code.

I feel hope. I feel like I can make it.

I decide to try Neovim. I google it and find that it's an improved version with Lua support. I don't know Lua, but it seems easier than VimScript at first glance.

This time, I decide to be smarter and use a preconfigured option since writing my own config still feels impossible. I grab a copy of https://astronvim.com/ and give it a try.

Now, I have a fully-fledged Neovim configuration. I have a file tree, I can search for things, open files, and navigate around—though just barely. But I feel like I'm making progress, right?

I try using it for two days at my job, and it's impossible. It feels strange compared to my IntelliJ setup. Where are my refactoring capabilities? How do I search files faster? How do I search only the most recently opened files? How do I rename things? Why isn't auto-import working? Also, why is hjkl so annoying, and why can't I remember the keys properly?

I'm frustrated again. I'm trying to do my job, but I simply can't. I'm way too slow, and I can't afford this since I'm trying it on company time. Besides, this astronvim setup feels extremely bloated.

I give up on it.

The final final final chance

It's two weeks later. I notice more streamers using Neovim. I'm still not part of the cool kids club, but I'm motivated to make the switch.

This time, I decide to be smart about it. I'm not going to use a distro like Astronvim anymore. I google around and learn that I can use Vim keybindings within IntelliJ. IdeaVim comes to the rescue.

This is amazing news. I can now have all the great IntelliJ functionalities while also being able to jump around code using Vim motions.

I remember that most of my frustration with Vim was because I didn't know how to do basic operations like gtd (go to definition), gtr (go to reference), find all references, and rename things globally. Using IntelliJ with Vim keybindings seems like a great idea because IntelliJ can handle all the LSP tasks, and I can use Vim motions to navigate code quickly.

I make the switch - partially.

It's now my first day at work using IntelliJ with Vim motions. I'm slow, and everything still feels frustrating, but I know this is temporary. I manage to push through the first day, and being inside IntelliJ definitely helps a lot.

On the second day, I manage to move around a bit more. I now feel like I know my way around hjkl, and I don't get them confused anymore. I'm improving and motivated to continue.

I push through the whole week.

The big switch

I've been using Vim motions within IntelliJ for almost two months now. I'm fast. I can navigate code so quickly that IntelliJ sometimes can't keep up with me (probably because it is written in Java).

I'm a master at both vertical and horizontal movements, jumping inside quotes and brackets. I've discovered the F and T motions, and now I always look for "Vim modes" in every app I use. Sixteen-year-old me would be proud.

But I'm still not fully part of the cool kids club. So I decide to give raw nvim another try, but this time I plan to be smart about it.

I remember from the past that I hated how complex the astronvim documentation felt, and I disliked always having to look up shortcuts in their documentation. So I decide it's time for me to write my own nvim configuration from scratch.

I want to have a deep understanding of my entire configuration and properly understand all the pieces, so I spend the weekend learning Lua.

By knowing Lua, nvim starts to make sense and my first nvim config is starting to come to life.

I now have an LSP, and I made my first customization by getting rid of the annoying auto-complete pop-up on every key press. Now, I only see it when I want to by using command-space.
I've configured Telescope, making it easy to find everything I need, and I've set up the beautiful Gruvbox theme.

I learned about macros, registers, and the quickfix list. I finally understand where my copied text goes when I delete something. I can make changes across the entire codebase and look cool doing it all from my terminal—life is great again. Now, I can replace IntelliJ with a very minimal nvim setup.

I uninstall InteliJ and cancel my subscription.

I'm finally part of the cool kids club—I finally get to say "I use Vim."

Present

It's been a year, and wow, I've been using nvim every single day! I feel faster than ever. I can type at 200 WPM, putting me in the top 0.1% worldwide. Combining my typing speed with vim motions makes me incredibly fast—faster than anyone I know.

I take every chance to brag about using vim and try to convince everyone else to join the vim revolution.

More things are starting to make sense to me, and I finally understand why @realGeorgeHotz was using vim without any plugins.

I've also started using tmux, and I'm gradually joining the Unix as IDE movement.

I can honestly say that learning vim was one of the best choices of my life. The next best choice is probably going to be fully embracing the "Unix as IDE" philosophy, which I've already started doing, but that's a story for another article.

###