代码之家  ›  专栏  ›  技术社区  ›  Leonard

寻找一个C美化将插入行元素之间的空格[关闭]

  •  1
  • Leonard  · 技术社区  · 15 年前

    我喜欢C代码中几乎所有语义元素之间的空格。

    所以我更喜欢

    if ( ( foo = bar ( arg1, arg2, arg3 ) ) ==  NULL ) {
        printf ( "Error 42" );
    }
    

    if((foo=bar(arg1,arg2,arg3))==NULL){
        printf("Error 42");
    }
    

    在(Unix平台)周围是否有一个C美化程序可以做到这一点?
    它需要一个非常聪明的美容师,因为它必须离开功能。 仅宏。

    4 回复  |  直到 13 年前
        1
  •  4
  •   Robert Gamble    15 年前
    indent -prs -br -i 4 file
    

    变成这样:

    #define f(x) ((x)+(x))
    
    if((foo=bar(arg1,arg2,arg3))==NULL){
        printf("Error 42");
        f(42);
    }
    

    进入这个:

    #define f(x) ((x)+(x))
    
    if ( ( foo = bar ( arg1, arg2, arg3 ) ) == NULL ) {
        printf ( "Error 42" );
        f ( 42 );
    }
    

    这个 -prs 选项将空格放在圆括号周围、运算符周围和逗号后面的空格作为标准。这个 -br 选项强制使用支撑样式,以及 -i 4 使用4个空格缩进。注意,宏定义没有被修改,但是对代码中类似宏的函数的调用是(可能是您想要的)。

        2
  •  2
  •   Variable Length Coder    15 年前

    你可能想看看 GNU Indent . 我相信它可以做你想要的一切。

        3
  •  1
  •   Jerry Coffin    15 年前

    GNU缩进可能会做到这一点。不幸的是,indent有大量的选项,其中许多选项根本不是直观的,而且许多选项的交互方式非常奇怪。我从未(甚至没有一次)设法让它以一种比进入更丑的方式来格式化代码。在某些情况下,它更统一。在其他人身上,我想它一定是统一的,但它遵循的规则仍然很奇怪,以至于结果常常看起来很糟糕。

    在对缩进进行了一段时间的挣扎之后,我决定编写一个只支持一种格式的简单得多的程序,如果我想更改格式,只需编辑代码就可以了。

        4
  •  0
  •   alvin    13 年前

    我使用了Vim和选项Cindent和FormatOptions,取得了令人满意的效果。 整个文件可以缩进

      gg=G
      gg  -- go to 1st line 
      =G  -- indent upto lastline
    

    您可能希望编写一个formatExpr(vim7)或 您可能希望使用s///g命令编写一个自定义函数,并将其映射到一个键。

    以下将在paranethes后放置一个空格,但在define行中除外。

    V/定义/S/[()]/\1/G

    是的,您将学习regex:)