(I wrote this as a response to an Ask Hacker News post about learning Vim, but I thought it deserved a life of its own.)
This is one of my favourite Vim features. Say you have the following code:
do_something_with(some + long * complicated * expression)
^
Say your cursor is where the caret indicates. Typing ci) (“change inside parens”) in normal mode will:
delete all the text between the two matching parens
place you in insert mode with the cursor between the two (now adjacent) parens
put the deleted text in the yank buffer so that
pwill paste it.
The use case here is obviously so you can assign a name to that long complicated expression. ci) is much easier than selecting it with the mouse, and keeps your hands on the keyboard where they belong ;)
With nested parentheses, it does what you expect (affects the text contained by the innermost matching pair to contain your cursor - try it and see).
Other equally useful variants:
i"- “inside double quotes” - everything between double quotesi'- “inside single quotes”iw- “inside word” - the word the cursor is onis- “inside sentence” - great for editing proseip- “inside paragraph”
There are also similar motions beginning with “a”:
a)- likei)but includes the parens (e.g.da)deletes everything inside parens and the parens themselves)a"- similarlyaw- likeiwbut includes trailing whitespace.
For another great taste that goes great with this, see the surround.vim plugin. To whet your appetite: six keystrokes to wrap your current selection in <div> tags; four to change a string from “double-quoted” to ‘single-quoted’.

