容易重新格式化函数参数到在Vim的多行(Easily reformatting function a

2019-08-01 04:36发布

特别编辑遗留的C ++代码的时候,我经常发现自己手动重新格式化是这样的:

SomeObject doSomething(firstType argumentOne, secondType argumentTwo, thirdType argumentThree);

对这样的事情:

SomeObject doSomething(firstType argumentOne,
                       secondType argumentTwo,
                       thirdType argumentThree);

是否有一个内置的命令来做到这一点? 如果没有,可有人提出一个插件,或为其提供一些Vimscript中的代码? ( Jgq可以很容易逆转这一过程,所以它不必是双向的。)

Answer 1:

您可以使用splitjoin 。

SomeObject doSomething(firstType argumentOne, secondType argumentTwo, thirdType argumentThree);

内或支架,型gS分裂。 你得到:

SomeObject doSomething(firstType argumentOne,
    secondType argumentTwo,
    thirdType argumentThree);

你也可以用VIM-argwrap



Answer 2:

以下是我已经把我.vimrc 。 它比@ rbernabe的回答更加灵活; 它基于该格式cinoptions全局设置和简单的休息的逗号(,因此如果需要的话可以比功能更可以使用)。

function FoldArgumentsOntoMultipleLines()
    substitute@,\s*@,\r@ge
    normal v``="
endfunction

nnoremap <F2> :call FoldArgumentsOntoMultipleLines()<CR>
inoremap <F2> <Esc>:call FoldArgumentsOntoMultipleLines()<CR>a

这将映射F2在正常和插入模式进行搜索和在其上的所有逗号转换(与每个后0或多个空格),并在每个后一个回车逗号当前行替换,然后选择整个组,并使用该缩进Vim的内置=

这种解决方案的缺点已知是用于包括多个模板参数(它打破它们的逗号以及,而不是正常的参数只是逗号)线。



Answer 3:

我将寄存器设置为预设宏。 一些测试后,我得到了以下内容:

let @x="/\\w\\+ \\w\\+(\nf(_:s­\\(\\w\\+\\)\\@<=,/,\\r            /g\n"

:这条线,在vimrc,你可以通过执行宏x等格式的方法@x用光标上面要格式化行。 它增加了这么定缩进12位:

|
SomeObject doSomething(firstType argumentOne, secondType argumentTwo, thirdType argumentThree);

执行宏后: @x你得到

SomeObject doSomething(firstType argumentOne,
             secondType argumentTwo,
             thirdType argumentThree);

如果你是在函数定义的线,你可以只是做一个置换:

:s\(\w\+\)\@,<=,/,\r            /g

这是很容易把它放在一个映射:

nmap <F4> :s/\(\w\+\)\@<=,/,\r            /g<CR>


文章来源: Easily reformatting function arguments onto multiple lines in Vim