(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’.