An opinionated guide

Vim: from foe to friend in 9 minutes

Lessons from 3-years of intensive learning

Omer Hamerman
ProdOpsIO
Published in
9 min readJul 4, 2019

--

TL;DR
Using Vim is by-far the most productiveness-enhancing, enjoyable and rewarding tool you’ll ever adopt. This post was an idea I had for a long time; there are literally endless pieces of information about Vim out there, and every time I started writing I thought I was just adding to the chaos. I feel it became too important to ignore, too much of a productivity change, and probably the best tool I have ever decided to take upon learning, and so I’m sharing my process. This an opinionated post about how I think anyone should start. As I usually prefer to get solid procedures and actual action items, this is what I tried to create here, so readers don’t lose themselves in the sea of information out there.

For years Vim was a stranger to me. In one of my first job interviews as a junior, the recruiting manager wanted to test my limited set of skills and asked what my favorite IDE was. My answer was something like “Notepad++”. Needless to say, it wasn’t quite what he was expecting.
He dug further and asked, “What do you think about Vim?”
I replied: “Vim?? isn’t that this console thing no one knows how to exit?”
Long story short, I didn’t get the job…

To me, Vim was this CLI editor sysadmins used in videos and a kind of a hack-tool used by hipster developers around the world.
Why would anyone do that to themselves?” — I asked myself and others more than a few times trying to understand whenever I met another enthusiastic user.
I genuinely wanted to know why are people talking about it so much, why would anyone use it? How can anyone be so motivated to use and improve their flow with Vim continuously when it’s such a terrible tool to use.
What’s wrong with modern editors?

So I tried it out. — a lot.
I took Vim for as many test drives as I can count, there was a point I wanted to use it to prove myself I can. It was a Nemesis to me, and I couldn’t deal with it. I got to a point I made up my mind that Vim is a religion. There’s a bunch of people who believe in it with all their hearts and just the same amount of opposers, like me — that couldn’t see the light. So I left Vim aside, but couldn’t help keep thinking about it as I kept noticing other professionals across dev communities speak so highly of it. Heck, even on Silicon-Valley [s03e06] the fight is over spaces vs. tabs and Vim vs. Emacs. “Really?” I thought, “Vim vs. Emacs?”, people don’t use standard editors?

The real change happened when I met one of the most talented backend developers I had ever worked with. He was so enthusiastic about Vim, had so much knowledge, and most importantly worked so freaking fast and smoothly I had to know what he was doing. This leads to the beginning of my “why”…

Why

  1. Vim is always there; on any *nix machine, Mac and soon even Windows machines. You can always find it running natively on your OS. Vim (or its predecessor VI) are already installed, so even if you’re not going to utilize it for everything, you probably want to know it pretty well. You want to be able to find your away around remote-servers-editing quickly.
  2. It’s productive
    This is the holy grail of using Vim; once you master the basics, you’ll become so ridiculously fast, you really won’t able to go back. You’ll start looking for those quick moves when writing messages or when chatting online. Writing any code or editing blocks of it becomes smooth and fluent in a way you probably never knew possible.
  3. Integrations
    Vim is so powerful it has integrations with just about anything you can think if. I don’t even leave it to git commit, push, browsing through history and what not. Took it one step further and created my flow of solving merge conflicts right from Vim!
  4. Awesomeness
    Not sure if I should address this as a real factor, but being honest, Vim is an enjoyable tool. Every time I use it, including when editing these lines, I enjoy my shortcuts, movement abilities, macros, and repeatable commands.
    Think of yourself in the office using it; your colleagues are going to be so impressed they’d start asking for resources and tips. I know because that’s how I started and how other colleagues of mine started after me. We all can say the same thing, after reaching a medium proficient level: you become so freaking fast, other editors stop making sense. You can think fast, work quickly, and never feel an idiot again.
  5. It’s right
    Hands down, how many times did you find yourself editing over 20 locations in a single file, reaching for your mouse over and over, knowing in your heart what you’re doing is either wrong? How many times did you feel like you were wasting time on reaching UI buttons or looking for the right click to help you make the change? For me, the answer was dozens if not hundreds of times, until one decided to put a stop to it.
  6. It’s light; it’s so light it takes 10% of your machine’s resources. Check out the comparison below describing average memory consumption of popular IDEs:
A comparison of VIMs average memory consumption taken on a multiple Linux servers

How

Honestly, Vim is not the most accessible tool to adopt. Hell, it’s hard.
Vim has a very steep learning curve, but rest assured: if you try, don’t give up, and be consistent, it’s 1000% rewarding.

Time vs. Productivity of IDEs

The visual above is a simple demonstration of my learning curve experience. With any other IDE, I became semi-productive quite quickly (“semi” is only said in retrospect after knowing what Vim can do..). However, the green Vim curve shows my starting struggle, which, after a while turned to an incredible skill.

How did I do it?

After a few brutal fights, having my fallback IDE to run back to crying with the tail between my legs, I made a decision. Here’s how I did it:

  1. Got a nice small notebook I could carry around
  2. I bought the awesome Practical Vim by Drew Neil both in hardcover and for my iPad to read on the move
  3. Every night before going to bed, I read one tip — the book is very intelligently built like that for easy, slow studying
  4. The IDEs on my mac were removed, no more VSCode or PyCharm arms’ to run back to. It was Vim alone.
  5. I’ve signed up for “Mastering Vim Quickly” newsletter and followed them on Twitter, where I was constantly learning new tips
  6. I’ve started my online list of tips I learned and picked up on the way, which I maintain to this day
    Talking about new tips, these are endless, even after years of work you’ll find yourself applauding another feature you never knew of. Vim is an infinite jar of candy.
Rotating the joke on VIM… don’t quit the fight; it’s worth it

Gradual learning

After a few days of reading, I slowly started getting the grasp of movement in Vim using the famous hjkl, and learned to search and save keystrokes. I began understanding how Vim operates; What's the fastest and most elegant way for doing every single change. I started finding myself getting out of bed after reading a tip to try it out, writing it down in my notebook.

Diving right in may not be for everyone. If you’re not yet willing to drop everything else and using Vim alone, you may want to try out some excellent integrations for IDEs; a popular one is VSCode’s Vim mode which adds most of Vims functionality and abilities right in your beloved (and soon to be ditched 😉) IDE. I tried it and had a hard time finding 100% of the functionality I was used to, so I went straight back to full-on Vim.

When

Funny question to ask, but — right now. You may be launching a new project or starting a new job; these are just a trigger to adopt a new life-changing tool. Nothing has to be dramatic; you can pick it up as you go. As long as you’re consistent and determined, within a few weeks, you’ll get to the point discussed earlier, where no other tool is required any longer. You’ll be past the line of productiveness; where you’re faster in Vim than anything else.

Who

Jokes aside, mastering Vim is a life changer for any writer. Yes, it’s designed to edit code, but I got to a point I’m writing my text there since I feel more confident, productive, and comfortable. Here’s a nice piece: “Vim for writers”.

Whether you’re in IT, DevOps, full-on developer, the occasional script writer (and scriptwriter 😁), or data analyst: everyone can use Vim and enjoy it to the max. I got to write Python, Golang, Crystal, TypeScript Bash and a lot of text (these lines right now, e.g.). There’s no textual usage I can think of which Vim is not a perfect solution for.

Customizing

By now, you learned that Vim is one of the most versatile, customizable tools out there. Not only it has endless plugins, but you can also change your configuration file (The .vimrc) and can pretty much change everything.
Having that said, you may want to start Vanilla. Here’s a good video that can save you a lot of plugin installations just by knowing Vim’s built-in abilities.
The one thing that is recommended to use is Tim Pope’s Vim-sensible plugin.

Plugins

Having one of the largest enthusiasts communities out from there, Vim has endless plugins, most of them can be found on GitHub. A word of warning though, while plugins are helpful and enjoyable, they have a few downsides with them:

  • They’re heavy on Vim; you may notice lagging and longer response times with some highly demanding plugins
  • They may be conflicting with other plugins/configurations; (usually, you won’t notice that with popular plugins)
  • They’re masking some of Vim’s abilities. You install a plugin that has pretty good vanilla functionality in Vim already — Check yourself before running to every shiny plugin
  • They may be slowing down your leaning, adopt them with care, and slowly, only when you feel the need

Here’s the rather short list of plugins I use, I try to maintain it by removing the ones I don’t use anymore occasionally, you can also find the full list of them together with my .vimrc on GitHub.

That’s it, and thanks for making it this far!

I hope this post helps you get started and find your way towards an enjoyable productivity change. I know the internet is full of information and ideas, but since I had to figure out for myself what works best, and made it only after a few attempts, I thought of sharing the process with some other people looking for some guidance. I hope you enjoyed reading and will share this with anyone looking to make his first steps into Vim!

I invite to take a peek at my own .vimrc configuration, suggest changes or take ideas.

My name is Omer, and I am an engineer at ProdOps — a global consultancy that delivers software in a Reliable, Secure, and Simple way by adopting the DevOps culture. Let me know your thoughts in the comments below, or connect with me directly on Twitter @omergsr.

--

--