1

例如——当我做 gg=G on

int main()
{ 
return 0; 
}

它会将其更改为

int main()
{
   return 0;
}

我想要的是——

int main(){
   return 0;
}

'{' 应该在功能原型线上

4

3 回答 3

2

立方的答案一起去

要在astyle不修改文件的情况下使用,您可以使用命令gq和选项“formatprg”

formatprg指定将用于格式化缓冲区的外部程序。命令运行后,缓冲区将被程序的输出替换。

例如:要将其设置为使用c文件,您可以将以下内容放入您的 vimdc

autocmd FileType *.c set formatprg=astyle\ --style=kr

注意:允许您将不同的命令行选项传递给样式。

现在要在文件中使用它,您可以键入gggqG以将格式应用于整个文件。

于 2013-04-29T03:34:33.323 回答
2

AFAIK:

=重新调整缩进,它不会重新格式化代码的样式。例如,代码块样式(您的问题);或添加/删除空行;添加/删除空格,例如a=2 -> a = 2...

你可以这样做来改变{你之前/之后gg=G

:%s/)\n\s*{\s*$/) {/g

您也可以将它们写成一行,并制作一个映射以在短时间内完成。

例如,这一行:

:%s/)\n\s*{\s*$/) {/g|norm! gg=G

将转向:

int main()
{ 
if(foo)
{
return 1;
}
if(a>0)
return a;
for(int i=1;i<20;i++)
{
int foo=0;
foo=i;
}
return 0; 
}

进入

int main() {
    if(foo) {
        return 1;
    }
    if(a>0)
        return a;
    for(int i=1;i<20;i++) {
        int foo=0;
        foo=i;
    }
    return 0; 
}

编辑

我原来的答案建议:g/)$/j“加入”这两行,但我发现它不安全,例如:

if (a>0)
  return a;

会变成

if (a>0) return a;

这是 OP 不期望的。

于 2013-04-27T23:03:03.413 回答
1

您可以使用astyle,例如

nnoremap <A-S-f> :w<CR>:!astyle % --style=java<CR>:edit<CR>

它将它绑定到 Alt-Shift-f (请注意,这会保存/重新加载可能并不总是你想要的文件,有一些方法可以解决这个问题,但我现在不想过多地讨论这个问题)。

当然,您必须自己弄清楚将哪些选项传递给 astyle 以获得您喜欢的格式。

于 2013-04-27T23:55:27.260 回答