我想重新格式化一些看起来像这样的代码:
if (cond) {
foo;
}
到
if (cond)
{
foo;
}
由于这是C代码,我一直在考虑cindent
/ cinoptions
与=
一起使用,但似乎它不涉及多线规则。
我一直在考虑formatoptions
与gq
一起使用,而且似乎也不可能。
可以使用默认的Vim选项,还是应该使用特定的插件或函数?
答案 0 :(得分:5)
我不知道这是否完全解决了你的问题,但如果这是一次性操作,你可能想尝试正则表达式:
:%s/^\(\s*\)\(.*)\)\s*{\s*$/\1\2^M\1{/
请注意,^M
是一个控制字符,通常按 CTRL-V 后跟 ENTER 生成(取决于您的终端)。
编辑:正如Jay和Zyx的评论中所指出的,\r
是一种更换插入换行字符串的方法。我没有意识到这一点,非常感谢提示。
答案 1 :(得分:5)
:%s/^\(\s*\).*\zs{\s*$/\r\1{/
故障:
^\(\s*\)
=捕获行开头的空白
.*
=其他一切
\zs
=在此
{
=打开大括号
\s*$
=在行结束前尾随空格
\r\1{
=换行符,捕获的空格,大括号
答案 2 :(得分:4)
如果您安装Artistic Style,您可以执行以下操作:
:set formatprg=astyle\ -b
然后使用gq
重新格式化代码块。强调文本
如果您希望每次编辑C文件时都启用此功能,
您可以将以下内容添加到.vimrc
文件中。
autocmd BufNewFile,BufRead *.c set formatprg=astyle\ -b
答案 3 :(得分:1)
我不知道你是否可以在vim中做到这一点,但你可以尝试使用indent
选项的BSD -bl
命令。将光标放在第一个{
上,您可以键入! % indent -bl
输入。