【问题标题】:Is there a way to change the way vim auto formats c,c++ code有没有办法改变vim自动格式化c,c ++代码的方式
【发布时间】:2013-04-27 22:38:33
【问题描述】:

例如—— 当我在

上做 gg=G
int main()
{ 
return 0; 
}

它会变成

int main()
{
   return 0;
}

我想要的是——

int main(){
   return 0;
}

“{”应该在功能原型行上

【问题讨论】:

    标签: vim autoformatting


    【解决方案1】:

    阿法伊克:

    = 重新调整缩进,它不会重新格式化您的代码样式。例如,代码块样式(您的问题);或添加/删除空行;添加/删除空格,例如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 所期望的。

    【讨论】:

      【解决方案2】:

      跟Cubic's Answer一起去

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

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

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

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

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

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

      【讨论】:

      【解决方案3】:

      你可以使用astyle,类似

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-07-17
        • 1970-01-01
        • 2011-01-22
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        • 2021-10-21
        • 1970-01-01
        相关资源
        最近更新 更多