Skip to content

Latest commit

 

History

History
95 lines (68 loc) · 2.19 KB

README.rst

File metadata and controls

95 lines (68 loc) · 2.19 KB

ArgumentRewrap for VIM

About

ArgumentRewrap is a plugin for the VIM editor to split arbitrary calls with multiple arguments into multiple lines.

Examples

Think of a function call like this one:

foo( bar, baz, blub );

Calling ArgumentRewrap on this function will split it into multiple lines with correct indentation:

foo(
    bar,
    baz,
    blub
);

In a real world scenario you will most likely have to handle more complex arguments, which might contain comma separated lists themselves:

foo( [1,2,3], {a:"A", b:"B", c:"C"}, bar( some, other, function ) );

ArgumentWrap handles nested elements correctly and only rewraps the top level:

foo(
    [1,2,3],
    {a:"A", b:"B", c:"C"},
    bar( some, other, function )
);

If you want to rewrap nested elements simply select the corresponding line with the cursor and rerun the ArgumentWrap function:

foo(
    [1,2,3],
    {
        a:"A",
        b:"B",
        c:"C"
    },
    bar(
        some,
        other,
        function
    )
);

The plugin function scans for the first occurrence of an opening parenthesis "(", "[" and "{" which is followed by a comma. Therefore it is possible to split entries with parenthesis preceding the actual argument list:

foo["bar"] = someFunction( [1,2,3], arg2, arg3, arg4 );

The first brackets used for array access ["bar"] are ignored, as they do not contain a comma separated argument list:

foo["bar"] = someFunction(
    [1,2,3],
    arg2,
    arg3,
    arg4
);

Installation

Installing this plugin is realized by simply copying its files into the equally named folders inside your .vim directory. If you are using Pathogen just copy the folders of this plugin to a directory inside your bundle directory.

Keybinding

To simplify usage, you should bind a key to the argumentrewrap#RewrapArguments function. As an example:

nnoremap <silent> <leader>s :call argumentrewrap#RewrapArguments()<CR>

would bind to <leader>s.