(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:
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
p
will 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
- likeiw
but 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’.