One Year With Vim

22 May 2015

It’s been exactly one year
since I started using vim
as my primary editor.
I had tried using it before,
but never got to the point
where I could be productive
with my everyday work.

Earlier,
I had tried to learn it outside of work
so that my productivity wouldn’t be affected.
Because of that,
I wasn’t using vim in places
where it would have the greatest impact.
This time,
I dove right in.
I started using it all the time.
This forced me to learn things
that I needed most
when writing code.

Instead of memorizing shortcuts,
I was learning how to perform specific actions.
Instead of learning scary commands like
:vnew or :10j,
I was focused on figuring out things like
“how do I open a new editor pane in a vertical split”,
or “how do I move down 10 lines?”.

The one area
where I found vim really shines
is all those things you do
when you’re not actually writing code -
things like navigation,
moving blocks of code
or even having your git workflow
mostly within the editor.

Looking to get started with vim?

If you’re thinking of trying out vim,
here’s some of the things I learned
when getting started with vim.

Vimtutor is a great way
to get comfortable
with the basic actions within vim.
It is a terminal program
that shows you a vim tutorial
and lets you learn
by editing the text within itself.
If you have vim installed on your machine,
just enter vimtutor on the terminal
to start the tutorial.

Start with one of the graphical vims
(like Macvim or Gvim).
These will allow you
to use the mouse to select text or scroll down,
or save files with ctrl+S.
This will take away
a lot of the frustration
of getting to know vim.
(That said,
give terminal vim a shot later on.
I’ve moved almost exclusively
to terminal vim
because it works much better
with my workflow using Tmux.)

Don’t obsess over The Vim Way
of doing things just yet.
The closer you are to your current current editor
the less overwhelming
the learning curve will be.
Once you’re comfortable with
the most common features,
you can learn more advanced features
at your own pace.

Install some plugins that will
make it more like to your current editor.
Need a file explorer in the sidebar?
Try Nerdtree.
Missing the Ctrl+P shortcut
that you love so much in Sublime/Textmate?
Use the Ctrl-P plugin.

Install a plugin manager like Vundle.
This will help you
quickly install the plugins you need.
Instead of figuring out
how to get different plugins working,
you can just set up vundle
and let it take care of
managing the plugins.

Copy someone else’s vimrc.
Having a full fledged vimrc
when you’re starting out
is a huge advantage.
(Mine’s available on github, btw.)
That will help with all the basic settings
that you will miss
on a fresh install of vim.

Just before getting started with vim,
I had watched
Ben Orenstein’s excellent talk on
expert level vim.
I copied over his vim configuration
and started trying out some of the shortcuts
he showed off in the talk.
This helped improve my productivity in those early days.

Try out ctags
once you’ve spent some time on vim.
Being able to navigate
to a function definition
by hitting ctrl-]
is pretty sweet.
Once you’re used to
navigating with ctags,
you wouldn’t ever want to
navigate by opening files.

Learn to navigate vim documentation.
This is one of the most important ways
that you can improve your productivity with vim.
Say you want to find out what the } key does.
You can enter the command :help }
and you’ll see the documentation for that shortcut.

Wrapping up

Despite using vim for a year,
I feel like I have only
scratched the surface of
what I could learn to do with it.
Still I’m more comfortable with it
than I was with any editor
I’ve used before.

Even if you don’t want to use vim regularly,
simply playing around with it
can be a lot of fun
because it treats editing of text
so differently than most other editors.

Happy hacking!

Further reading/watching

Hi, I’m Nithin Bekal.
I work at Shopify in Ottawa, Canada.
Previously, co-founder of
CrowdStudio.in and
WowMakers.
Ruby is my preferred programming language,
and the topic of most of my articles here,
but I'm also a big fan of Elixir.
Tweet to me at @nithinbekal.