When defining or calling functions with enough arguments to span multiple lines, I want vim to line them up. For example,
def myfunction(arg1, arg2, arg, ...
I believe you have to issue the command:
:set cino=(0
This is when using cindent of course.
edit: I missed "set"
Try the Align http://www.vim.org/scripts/script.php?script_id=294 and AutoAlign http://www.vim.org/scripts/script.php?script_id=884 scripts.
The previous poster had it, but forgot the set
:set cino=(0<Enter>
From :help cinoptions-values
The 'cinoptions' option sets how Vim performs indentation. In the list below,
"N" represents a number of your choice (the number can be negative). When
there is an 's' after the number, Vim multiplies the number by 'shiftwidth':
"1s" is 'shiftwidth', "2s" is two times 'shiftwidth', etc. You can use a
decimal point, too: "-0.5s" is minus half a 'shiftwidth'. The examples below
assume a 'shiftwidth' of 4.
...
(N When in unclosed parentheses, indent N characters from the line
with the unclosed parentheses. Add a 'shiftwidth' for every
unclosed parentheses. When N is 0 or the unclosed parentheses
is the first non-white character in its line, line up with the
next non-white character after the unclosed parentheses.
(default 'shiftwidth' * 2).
cino= cino=(0 >
if (c1 && (c2 || if (c1 && (c2 ||
c3)) c3))
foo; foo;
if (c1 && if (c1 &&
(c2 || c3)) (c2 || c3))
{ {
you might get some good mileage out of using a language-specific external tool as a Vim filter. for example, if you can write a Perltidy config file to generate the formatting you want (it looks like you would want the -lp -vtc=2 flags), you can then pipe your existing Vim buffer through it with
:!/path/to/tidy -config /path/to/configfile
if you're going to be running this sort of command frequently, you can define an command by putting something like the following in your .vimrc:
command -range=% Tidy <line1>,<line2>!/path/to/tidy -config /path/to/configfile