Intermediate vim

I'll show you some tips to help move your editing skills from beginner towards intermediate.

Ok, so you know the basics of vim.

You know about insert mode and command mode. You press i to start inserting text, esc to get back to command mode. You even know some advanced things like how to exit vim—life is pretty good.

I want to share a few tips to level up your editing skills from beginner to intermediate.

A quick aside…

As a programmer, you spend a lot of time editing and navigating code. So regardless of which editor you use, it’s worthwhile to invest time into learning how to get more out of the tools you use every day.

Getting better at using your editor is not only about editing faster, but also about being more effective and accurate. As your skills improve you can be more precise and make fewer mistakes.

This will enable you to be more confident and work closer to your speed of thought. ✨

Inserting text

Using i to insert text at your cursor location is pretty good, but there are a few alternatives that are worth knowing about.

The two I use all the time are:

I to insert at the start of the line.

to insert at the start of the line. A to append at the end of the line.

I use I a lot for commenting code. Try typing I// and then hit esc to return to command mode.

Oops, you forgot to add a semicolon? No probs, type A; and you’ve just appended a semicolon to the end of the line.

Tip: Generally after you’ve inserted some text, you want to return to command mode so that you’re ready to enter your next command. I’d recommend pressing esc any time you’ve finished typing.

Another two that go together:

o to start inserting on a new line below the current one.

to start inserting on a new line below the current one. O to insert above the current line.

Tip: The way to remember this is the capital O looks like a helium balloon that floats up. I’m not even kidding, I think about balloons every time I do this. 🎈

Making (and avoiding) mistakes

We all make mistakes sometimes. Undo and redo in vim work mostly as you’d expect, except the keyboard shortcuts aren’t what you’re used to.

u to undo

to undo ctrl–r to redo

Pro tip: I’ll often use vim’s autocomplete to avoid typos in the first place. Try it out by typing a few characters in insert mode and then press ctrl–n to get completion suggestions. It works by matching words in open files — it sounds basic but works better than you’d expect.

Moving around

So maybe you’ve heard how advanced vim folks use h j k l instead of the arrow keys to move around — what the eff is that all about?? This is handy if you’re a touch typist since your hands are on the home row already.

Tip: If you’re always mixing up j and k , the way to remember it is that j kiiind of looks like a down arrow if you squint a bit.

If you’re like me and never learned to touch type properly, just use the arrow keys, it’s fine, don’t worry about it.

You’ll find that as your editing skills improve that there are much better ways of moving around a file anyway.

Here are a few movement commands I use a lot:

w and b for moving forward and back a word at a time.

and for moving forward and back a word at a time. fa move (f)orward to the character (a)

move (f)orward to the character (a) G move to the end of the file

move to the end of the file 52gg jump to line 52

jump to line 52 /Hello jump to the next occurrence of the text “Hello”.

Intermission

Phew! You know what? You’re doing great. I hope you’ve learned one or two useful things already, but don’t worry if you don’t remember everything.

Getting better at anything takes practice. You need to invest time and effort to learn a new skill and this is no different. I’d recommend that you focus on learning one thing at a time. Then later you can take what you’ve learned and turn it into a habit.

Alright, now we've covered the basics — let's continue with some intermediate stuff!

Composing commands

Let’s start with a few examples and I’ll explain on the way.

Say I want to delete a word. I move my cursor to the start of the word and press dw . It’s a bit like saying “(d)elete (w)ord”.

For this next example I’ll start with the text PastaController with the cursor at the start. I can type the command dtC and now it’s just Controller — wait, what just happened? If you look at that command closely, you can read dtC as “(d)elete up (t)o character (C)”.

What’s going on here is that we’re starting to compose commands. Pressing d is how we start deleting, but then we can combine it with the movement command tC .

Tip: Try deleting using some of the other movement commands we learned about earlier.

Changing text

Often after deleting text the very next thing you want to do is to insert more text.

Instead of using d to delete, you can use the alternative c to change text. What this means is that after deleting the text, it’ll put you straight back into insert mode so you can start typing stuff in immediately.

cw change word

change word ctA change up to the character A

change up to the character ct( change up to the character (

change up to the character cc change the entire line — Tip: dd deletes the line

Text objects

Most of the text we edit every day is semi-structured. Most source code consists of words, quoted strings, html markup, parentheses and brackets of all sorts.

Vim has the concept of “text objects”, which allows you to take advantage of the structure in your text files to edit very precisely.

ciw change inside word

change inside word ci( change in parenthesis

change in parenthesis ci{ change in curly brace

change in curly brace ci< change in < > angle brackets

change in angle brackets ci" change inside quotes (this leaves the quotes intact)

change inside quotes (this leaves the quotes intact) ca" change (a)round quotes … means quotes get replaced too

change (a)round quotes … means quotes get replaced too cat change (a)round (t)ag … yep, vim understands html tags!

… you get the idea hopefully!

Can you see how we’re building commands that read like little sentences?

Summary

Vim has different ways of entering insert mode.

There are many ways to move around a file efficiently.

You can compose “delete” and “change” operators with a movement command.

Vim can take advantage of the structure in text … this is super powerful!

Learning new things takes practice. Invest your time to learn new skills, and then turn what you’ve learned into a habit.

Thanks for reading! If you enjoyed this article or have any questions or comments, please feel free to let me know!

Acknowledgements

Thank you to all my kind and talented friends and colleagues at Culture Amp for their helpful feedback and advice in writing this article. 😊