我喜欢C代码中几乎所有语义元素之间的空格。
因此我更喜欢
if ( ( foo = bar ( arg1, arg2, arg3 ) ) == NULL ) {
printf ( "Error 42" );
}
到
if((foo=bar(arg1,arg2,arg3))==NULL){
printf("Error 42");
}
周围是否有一个C美化器(unix平台)可以做到这一点? 它需要一个认真的智能美化'因为它必须留下功能 单独的宏。
答案 0 :(得分:4)
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个空格进行缩进。请注意,宏定义未被修改,但代码中对函数式宏的调用(可能是您想要的)。
答案 1 :(得分:2)
您可能需要查看GNU Indent。我相信它可以做你想要的一切。
答案 2 :(得分:1)
Gnu Indent可能会这样做。不幸的是,缩进有很多选项,其中许多都不直观,而且其中许多选项以极其奇怪的方式进行交互。我从来没有(甚至没有一次)设法让它以一种比进入更难以出现的方式来格式化代码。在某些情况下,它更加统一。在其他人看来,我认为它必须是统一的,但它所遵循的规则仍然很奇怪,结果往往看起来很奇怪。
经过一段时间的缩进后,我决定编写一个只支持一种格式的简单程序更容易,如果我想改变格式,只需编辑代码。
答案 3 :(得分:0)
我曾经使用带有选项cindent和formatoptions的vim来达到令人满意的效果。 你可以通过
缩进整个文件 gg=G
gg -- go to 1st line
=G -- indent upto lastline
你想写一个formatexpr(vim7)或者 您可能希望使用s /// g命令编写自定义函数并将其映射到密钥。
除了#define行
之外,以下内容将在parantheses之后放置一个空格v / #define / s / [()] / \ 1 / g
是的,你将学习正则表达式:)