More than a year ago, I
expressed
some frustration about cindent in vim. My main complaints about it were
that it made bad decisions about indentation on some languages that were not
strictly C-syntax (perl, python, javascript).
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=!^F
Now 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