特别是在编辑旧版C ++代码时,我经常会发现自己手动重新格式化这样的内容:
SomeObject doSomething(firstType argumentOne, secondType argumentTwo, thirdType argumentThree);
这样的事情:
SomeObject doSomething(firstType argumentOne,
secondType argumentTwo,
thirdType argumentThree);
是否有内置命令来执行此操作?如果没有,有人可以建议一个插件或为它提供一些VimScript代码吗? (J
或gq
可以非常轻松地改变流程,因此无需双管齐下。)
答案 0 :(得分:9)
您可以使用vim-argwrap。
SomeObject doSomething(firstType argumentOne, secondType argumentTwo, thirdType argumentThree);
在括号内或括号中输入gS
进行拆分。你得到:
SomeObject doSomething(firstType argumentOne,
secondType argumentTwo,
thirdType argumentThree);
您也可以使用{{3}}
答案 1 :(得分:3)
以下是我在.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内置=
缩进它。
此解决方案的一个已知缺点是包含多个模板参数的行(它的逗号也会断开,而不仅仅是正常参数的逗号)。
答案 2 :(得分:2)
我会将寄存器设置为预设宏。经过一些测试后,我得到了以下内容:
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>