Crash course in vim text objects

Once you learn to think in text objects, you'll never be the same

Any vim user knows that there are underlying concepts worth understanding. While learning the specific keystrokes is useful, I find that knowing the why is crucial to actually adopting new features. Vim's text objects are one of these concepts and they are very worth understanding.

Text objects are vim's way of transcending the individual character to allow the user to think in words, sentences, sentences, and paragraphs. They are "contexts" in which your cursor exists and which you can act upon in various ways.

Note: if you are a complete novice, this is not the guide for you... this intro to vim is though!

As a reminder, vim's command format is <number><command><text object or motion>

1

We all know you can delete a single character using the x key in normal mode. But that's no fun! We should start thinking in words.

Note: I'll be using the | character to signify the position of your cursor in normal mode.

This is so|me text.

Typing diw will result in the following (notice the extra space):

This is  text.

So what did we do? We told vim to d delete the i inner w word. We can also tell vim to delete "a word".

This is so|me text.

Typing daw will result in the following:

This is text.

Text objects always follow this pattern. a acts upon the surrounding white space and i does not.

I find this particularly handy with the c (change) command. The c command removes the text object and starts your cursor in insert mode.

2

Once you've gotten used to thinking in characters AND words, it's time to level up to sentences. A sentence is defined as ending at a ., ! or ? followed by either the end of a line, or by a space or tab.

Howchoo is great. I always learn |something new when I come here. I plan to tell all of my friends about this wonderful website.

Typing d2as results in the following:

Howchoo is great.|

We told vim to d delete 2 s sentences. So vim deleted the sentence our cursor was currently in plus the next one.

Here we can clearly see the difference between acting on text objects and using motions. To move to the next sentence, you can press ( or ) in normal mode. In my experience, this is great for moving around but when modifying text, it is less flexible given that you have to first get your cursor in the exact right position before your command.

3

Once you've mastered the previous objects, it's time to learn paragraphs. This will complete your text object knowledge. According to the docs, a paragraph begins after each empty line, and also at each of a set of paragraph macros, specified by the pairs of characters in the 'paragraphs' option. We can think of it as any block of text surrounded by empty lines.

Here's a cool paragraph about Howchoo. 
I'd really like to spend more time on this website.
Every time I'm here, I learn something amazing.

I'll maybe even make it my homepage.|
Who even uses homepages anymore?

Typing cip results in the following:

Here's a cool paragraph about Howchoo. 
I'd really like to spend more time on this website.
Every time I'm here, I learn something amazing.

|

With a cursor in insert mode, ready to type.

4

Once you've mastered these concepts, you can get into more interesting text objects and even use custom built ones. Here are some bonus text objects to experiment with:

  • Single quotes: a'
  • Double quotes: a"
  • Parentheses: a)
  • Brackets: a]
  • Braces: a}
  • HTML tags: at
  • Angle Brackets: a>