Posted Mon, 31 Dec 2007
Tonight I decided that I wanted to automate indenting to the closest '(' as in:
if (foo() and bar() and baz): ^ Want to indent to here, somehow, on command.The 'cindent' feature of vim lets you configure this to happen automatically, but in some cases it won't indent properly: ie; a comment with a ( at the end of the line, for example, will screw it up.
I got tired of dealing with it, so I went back to autoindent, and I've been happier ever after. Fooling around tonight, I started working on a vim function to basically do exactly what I needed. An hour later, it was done. In the process, I wanted to confirm the default actions of ctrl+f in insert mode, which lead me to the cinkeys docs, which clued me that 'cindent' only autoindents on certain occaisions.
All of my time was wasted, it seems, after I figured out setting this option:
set cinkeys=!^FNow cindent only activates when I hit ctrl+f. If I have both autoindent and cindent enabled, with this cinkeys setting, the default indentation behavior is exactly autoindent, and I can invoke cindent at will.
The following is now set in my .vimrc:
set autoindent set cindent " Use c-style indentation set cinkeys=!^F " Only indent when requested set cinoptions=(0t0c1 " :help cinoptions-values
If you're interested in the vim script I wrote, which I no longer need, you can download it here: paren_indent.vim