Table of Contents
Even if you’re an experienced vim user you might want to skim this section.
There are countless vim tutorials out there, so why this one? What’s different here is:
many tutorials miss a lot of defining features of vim. Vim is about being fast, efficient, and moving your hands as little as possible to get the most done. We will be focusing on that right from the beginning. My index fingers sit on the f and j keys and my wrists won’t lift off my laptop for anything here. This should be your goal. This is why even if you use vim I suggest skimming over the basics.
we will start from the very beginning and get you up to an intermediate level. Why not advanced? Because there is really no such thing. You will always be learning new things in vim and mastery takes a lifetime. The nice thing about vim is that you can constantly learn new things about it and how to do things more efficiently. Don’t worry though, with just a few commands under your belt you can do a lot. Over time you will learn a lot more and impress all your friends.
In this tutorial we will focus less on commands, but on vim “theory”. To get to mastery we need to be able to understand vim and how it works, not just memorize a bunch of commands. Thus, we will be focusing on the former before we introduce the latter. This will help you memorize these commands, because it will greatly reduce the load.
Why should I even learn vim? My editor is better!
Cool! I don’t care. Go learn your editor then. Your editor is all about productivity. If you want to use something other than vim, then go ahead. But I will give you the one reason why everyone should know the basics.
If you touch a *nix computer, it will have
vi installed. Not
Knowing just some basic stuff will allow you to work on almost any machine. You
aren’t guaranteed emacs, sublime, or whatever, but you will find vi. Because of
this I think the majority of programmers should at least know how to write a
Before we get started we have to mention something about vim. Vim has different
command interfaces, which we will call mode.
normal mode is when your key
presses perform actions. You cannot write in this mode.
insert mode means the
keys you press are going to enter into the terminal. There’s other modes that
we’ll introduce later but we will run into these two modes right away. This is
the largest hurdle for learning vim and it turns many people away. If you have
ever heard someone call vim a “random text generator” you can assume they never
got past this concept.
Write A File
This is the absolute basics. If you’ve done
vimtutor you can skip this
section. next section!
How do I write a file? Vim is just a random text generator!
So what did I press?
i press `i` to enter insert mode press <C-[> to escape back to normal mode press :x to save and quit. <C-[> :x
Here we started in normal mode, so we had to enter insert mode by pressing
Once there we could type to our hearts content. When we were finished we pressed
<C-[> (this is the same as
Ctrl + [, we will use the previous notation) to
go back to normal mode and then typed
:x to save and quit.
There are some things different that you may have noticed. I didn’t press
to get back to normal mode (You can also use
<C-c>. That’s because that button
is too far to reach. Seriously! Vim is about being fast and not having
to move your hands much. If your wrists come off the keyboard then
you’re probably doing it wrong! This is the vim way. The second thing is
I didn’t type
:wq to write and quit. That’s because it has an extra
letter and we don’t need that kind of negativity in our lives.
Commands we learned
i takes you from normal mode to insert (writing) mode
esc take you from insert to normal mode
:x saves and quits.
If you get in trouble just yell at the computer to quit. If your computer
doesn’t have a built in microphone try the command
:q!. It’ll listen then.
Thou shalt not use the arrow keys
This is one of the commandments of vim. We will never use the arrow keys. (If you look in my vimrc file you will notice they are enabled, that’s for others. Your configuration should also be usable by others).
Movement is done in
normal mode (We’ll be hitting
<C-[> a lot).
Our basic movement is
l. These correspond to moving
right, respectively. Essentially these are your new arrow keys
(you’ll also be surprised how many programs and websites allow you to use this
But we want to do more. So here’s a quick list of the most common patterns I use
gg Goes to the top of the file G Goes to the bottom of the file H Places the cursor at the top of the screen (High) M Places the cursor at the middle of the screen (Middle) L Places the cursor at the bottom of the screen (Low) w Moves forward by word b Moves back by word ^/0 Moves to the beginning of the line $ Moves to the end of the line zt Moves the screen so the top is at the cursor (top) z. Moves the screen so the middle is at the cursor (middle) zb Moves the screen so the bottom is at the cursor (bottom) <C-f> Moves the page forwards <C-b> Moves the page backwards f a Moves the cursor to the next instance of "a" (find) /foo Searches for the next instance of "foo" * Searches for the next instance of the word that the cursor is on
These are the most common movements I use. Pretty much with these and
can get anywhere on the page in just a few movements.
Now try placing numbers in front of them. Like
17G (it’ll take you to the 17th
line!) Where it logically makes sense to use a number, it probably works there.
For most of this we will be in
normal mode but a few instances will be from
Editing is the point of an editor, so let’s get to it!
Editing in normal mode
We’ll be learning the following commands
x delete a single character dd deletes the whole line d$/D deletes to the end of the line dgg deletes to the top dG deletes till the end of the document yy yank the entire line p paste it u undo (what you last did in insert mode) U undo everything! <C-r> redo
Now that we have some movement and editing under our belt we should easily be able to do the following. (At the end we undo and the redo)
Entering Insert mode
Part of editing is actually writing. So we need to figure out how to actually write text. We’ll be learning the following commands
i enter insert mode at cursor a enter insert mode and move cursor right I enter insert mode at the beginning of the line A enter insert mode at the end of the line O enter insert mode above current line (new line) o enter insert mode below current line (new line)
Really you just have three things to learn here:
A key thing to notice is down in the bottom left. You’ll notice when I’m in insert mode. When there is nothing there I’m in normal mode. All of the above commands are performed while in normal mode.
That’s it! You are now able to use vim. Just with these commands you can navigate and do some basic editing. If you can do everything here you can honestly say that you “know vim”. If you get good at the above, most people will think you’re good at vim. But we want to be better at than that. So keep reading.
You may have noticed that some commands (like yank, go, and delete) are
multi-letter commands. This is because the first letter is telling you the
command and the second letter is telling you the action. For example delete has
a movement command after (try
$). Play around with this and keep it in
mind as we continue.
Next let’s look at the Vimrc.