特别编辑遗留的C ++代码的时候,我经常发现自己手动重新格式化是这样的:
SomeObject doSomething(firstType argumentOne, secondType argumentTwo, thirdType argumentThree);
对这样的事情:
SomeObject doSomething(firstType argumentOne,
secondType argumentTwo,
thirdType argumentThree);
是否有一个内置的命令来做到这一点? 如果没有,可有人提出一个插件,或为其提供一些Vimscript中的代码? ( J
或gq
可以很容易逆转这一过程,所以它不必是双向的。)
您可以使用splitjoin 。
SomeObject doSomething(firstType argumentOne, secondType argumentTwo, thirdType argumentThree);
内或支架,型gS
分裂。 你得到:
SomeObject doSomething(firstType argumentOne,
secondType argumentTwo,
thirdType argumentThree);
你也可以用VIM-argwrap
以下是我已经把我.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的内置=
。
这种解决方案的缺点已知是用于包括多个模板参数(它打破它们的逗号以及,而不是正常的参数只是逗号)线。
我将寄存器设置为预设宏。 一些测试后,我得到了以下内容:
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>