Automatically insert a matching brace in Vim

I spend way too much time fumbling around because Vim doesn't handle closing braces like most IDEs do. Here's what I want to happen:

Type this:

if( whatever )
{ <CR>

and get this:

if( whatever )
{
  |  
}

where <CR> mean hit the ENTER key and | is the position of the cursor. This is what Eclipse does. It's what Visual Studio does. And it's what I want Vim to do.

I've seen a few plugins, tried a few, and none of them seem to give me this behavior. Surely I can't be the first programmer to want this.


Solution 1:

In VimL, you can map the { to do exactly as you wish:

inoremap { {<CR>}<Esc>ko

depending on your autoindent setup, you may want to add a <BS> after <CR>.

For a more complete solution, I'd suggest you take a look at Luc Hermitte's vim plugins. They've never failed me so far.

Solution 2:

Using AutoClose with the following works correctly.

inoremap {<CR> {<CR>}<C-o>O

This is true for my system at least (Unix terminal on Mac OS X).