Hacker News new | past | comments | ask | show | jobs | submit login

Same with the "i" (inner) command.

(Technically it's a motion, not a command. "i" as a command just enters insert mode.)

To elaborate, since 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 '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 quotes

* i' - "inside single quotes"

* iw - "inside word" - the word the cursor is on

* is - "inside sentence" - great for editing prose

* ip - "inside paragraph"

There are also similar motions beginning with "a":

* a) - like i) but includes the parens (e.g. 'da)' deletes everything inside parens and the parens themselves)

* a" - similarly

* aw - like iw but includes trailing whitespace.

(Update - I thought this deserved its own air, so I turned it into a blog post: http://blog.samstokes.co.uk/post/767636740/vim-wizardry-1 Bonus tip if you read to the end!)

And if you like operating inside of matching pairs, just think how much you'll like manipulating the pairs themselves! http://github.com/tpope/vim-surround

This is really interesting. I don't vim much anymore but thanks for this!


I've been using Vim for over a year and had no idea about this.

Holy crap, that's awesome.

My only regret is that I have but one upvote to give!

I always used to do F(lvf)hc rather than ci)

Heh, this is now my most popular HN comment to date. Thanks for the upvotes!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact