A year ago (I still do), I would get so amazed and overwhelmed watching ThePrimeagen navigate the Vim editor. I wanted to do it as well. But I was too afraid to try it out and thought I wasn’t that smart, and it was too much work to learn something that wasn’t directly adding any value to my programming knowledge. But at the same time, I wasn’t happy with my current VS Code experience, which kept crashing on my machine since I switched to Linux from Windows 11. A few months ago, I said, eff that to my fear. At least I’ll try and see what is this crap that allows Prime’s cursor to move with lightning speed.
Jumping straight into Vim felt notoriously dangerous, so I installed the Vim emulator extension in VS Code.The first two weeks were frustrating and negatively affected the task I was working on. So, after 10-15 minutes of stupidly trying to mimic the daddy Prime, I’d disable the extension and code the old way. Every day for the next two to three weeks, I’d go through this initial ritual where I felt like a total moron for a straight 15 minutes, and then continue my day-to-day programming voyage with Ctrl, arrows, and mouse.
By the end of the third week—I don’t know when or how—but I suddenly found myself being "ONE" with Vim keybindings. The 15-minute ritual expanded a bit longer, and only when I hit a roadblock (for instance, not knowing how to search and replace text) would I find myself needing to revert. But otherwise, I could place my cursor exactly where my eyes wanted it to be with Vim keybindings without thinking or calculating. It felt like this was the right way to navigate the text. I wanted to use it everywhere.
I found this particular written series to be very helpful in explaining all the terminology I needed to know. There are also a few interesting talks from Vim cult members to make you believe that Vim is a real thing, and it’s worth beating your head around.
It’s been more than a month since I started learning Vim. I don’t feel fully confident yet doing development work there, which unfortunately still is React Frontend JS/TS Node. But I’ve set up Neovim (obviously), and I use it for a personal project(Go cli tool) I’m working on these days (I’m unemployed, by the way—so full time on a personal project, so full time on Neovim these days). And I guess configuring Frontend with NeoVim will be an awful experience, so I’ll avoid it totally.
I made a big mistake by blindly installing something called nvchad. It felt like I was back in VSCode, but with a broken experience. The fonts were off, spacing and icons weren’t aligned properly, and overall, it was glitchy. It also felt like magic, which is exactly what I want to avoid.
I’m not interested in ricing Neovim by adding cute icons, customizing fonts, or turning it into a full IDE. My goal is to keep things simple and lightweight, avoid unnecessary configuration, and stick to the core of Vim.
I came across this minimal configuration: kickstart.nvim from Neovim cult member TJ, who’s one of the most referenced figures for setting up Neovim—so it’s worth checking out his work.
The Kickstart config has just enough complexity for me. The config file (init.lua
) is well-documented, so I know exactly what each setting does. Great! It also came with a plugin called Telescope, which makes it easier to jump between buffers, search files, change color schemes, and more. (Using Telescope does mean straying a bit from my default-Vim philosophy, but the plugin is so intuitive it feels like a built-in feature, so I'll keep it.)
For file navigation, the builtin explorer, Netrw is good enough. Here's nice cheat-sheet I found. My eyes are too used to the one dark theme from working in VSCode, so I added that for familiarity's sake. For now, my goal is to get efficient with the defaults and avoid extra bloat as much as possible.
From what I understand, learning Vim involves two parts: 1. Vim motions and 2. Configuration, which in itself can take some time. Most people and resources, as I've seen, spend too much time configuring things rather than using the actual editor and trying to get better at it. So, right now, my focus is on Vim motions, because this skill is portable (heck! Even note-taking apps like Obsidian have Vim keybindings). It’s editor-agnostic and makes editing much more enjoyable.
So, where I'm after a month of learning vim?:
- I know how to quit Vim.
-
Moved past
hjkl
basics: I now intuitively use commands like$
,0
,^
,gg
,G
,f(x)
,F(x)
,Ctrl + e
, andCtrl + u
. -
Switching modes: I switch back to insert mode with
i
,a
,o
, andO
. -
Text editing commands: Edit, replace, and change the case of text with
gu
,gU
,r[x]
, andciw
. -
Visual mode: Using visual mode to mark text (e.g.,
vap
,vG
,v{
). -
Basic search and replace: Searching and replacing patterns (
/pattern
,%s/old/new/g
). -
Copy, paste, delete: Commands like
yy
,dd
,p
,yaw
,yap
, anddaw
. -
Using registers: Copying to and pasting from specific registers (e.g.,
"ayy
,"ap
). - File management with Netrw: Creating and navigating files.
My fingers have learned these 30-40 keybindings, so now I don't spend an ounce of energy thinking about moving around while writing code, compared to a month ago. What's more amazing is that I didn't try to memorize any of the keybindings (only 5-10), and the rest came intuitively. Now that I'm already comfortable, these days I randomly scan through this cheat sheet and find myself saying, "Oh! That's how you do it."
Overall, learning Vim has been a good experience so far. It’s a pain in the a**s at first—I even dreamed about typing the wrong Vim motion once and woke up with the most violent cramp in my lower leg. I guess it will get better.
Nice article, your experience motivated me to learn vim myself! But is Vim for everyone, What do you think ?