有没有办法用Vim自动重新格式化括号?

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

要回复问题请先登录注册