代码格式化工具:Artistic Style Files Download
配置 Source Insight
添加 Astyle 命令
Tools --> Custom Commands -->Add
在 Run 栏填入格式化命令:
"D:\Program Files\astyle-3.5.2-x64\astyle.exe" -A3 -t -xV -w -Y -m0 -p -H -U --squeeze-lines=1 --squeeze-ws -k3 -W3 -n %f
添加 Astyle 快捷键
Tools --> Custom Commands --> Keys --> Assign New Key
Astyle 参数说明
--style 设置代码风格
所有风格见:Artistic Style
Allman 风格
--style=allman / --style=bsd / --style=break / -A1
int Foo(bool isBar)
{if (isBar){bar();return 1;}elsereturn 0;
}
gnu 风格
--style=gnu / -A7
int Foo(bool isBar)
{if (isBar){bar();return 1;}elsereturn 0;
}
Linux 风格
--style=linux / --style=knf / -A8
int Foo(bool isBar)
{if (isFoo) {bar();return 1;} elsereturn 0;
}
google 风格
--style=google / -A14
int Foo(bool isBar) {if (isBar) {bar();return 1;} elsereturn 0;
}
代码宽度设置
--max-code-length=# / -xC#(# 有效值 50 - 200)
--break-after-logical / -xL
将if (thisVariable1 == thatVariable1 || thisVariable2 == thatVariable2 || thisVariable3 == thatVariable3)bar();格式化为if (thisVariable1 == thatVariable1|| thisVariable2 == thatVariable2|| thisVariable3 == thatVariable3)bar();加上 break-after-logical 后格式化为if (thisVariable1 == thatVariable1 ||thisVariable2 == thatVariable2 ||thisVariable3 == thatVariable3)bar();
缩进设置
--indent=spaces / --indent=spaces=# / -s#
with indent=spaces=3每次缩进使用 # 个空格进行缩进。2 <= # <=20。不设置 # 时默认为 4void Foo() {
...if (isBar1
.........&& isBar2)
......bar();
}
--indent=tab / --indent=tab=# / -t / -t#
缩进使用制表符进行缩进,使用空格进行连续行对齐。这可以确保无论查看者的标签大小如何,代码都能正确显示。将每个缩进视为 # 个空格with indent=tab:void Foo() {
> if (isBar1
> ........&& isBar2) // indent of this line can be changed with min-conditional-indent
> > bar();
}
with style=linux, indent=tab=8:void Foo()
{
> if (isBar1
> ....&& isBar2) // indent of this line can NOT be changed with style=linux
> > bar();
}
--indent=force-tab / --indent=force-tab=# / -T / -T#
如果可能的话,全部使用制表符缩进。如果连续行不是偶数个制表符,则会在末尾添加空格。将每个制表符视为 # 个空格indent=force-tab:void Foo() {
> if (isBar1
> > > && isBar2) // indent of this line can be changed with min-conditional-indent
> > bar();
}
do - while 设置
--attach-closing-while / -xV
将
do
{bar();++x;
}
while x == 1;格式化为:do
{bar();++x;
} while x == 1;
switch 缩进
--indent-switches / -S
将
switch (foo)
{
case 1:a += 1;break;case 2:
{a += 2;break;
}
}格式化为:switch (foo)
{case 1:a += 1;break;case 2:{a += 2;break;}
}
case 缩进
--indent-cases / -K
将switch (foo)
{case 1:a += 1;break;case 2:{a += 2;break;}
}格式化为:switch (foo)
{case 1:a += 1;break;case 2:{a += 2;break;}
}
命名空间缩进
--indent-namespaces / -N
将
namespace foospace
{
class Foo
{public:Foo();virtual ~Foo();
};
}格式化为namespace foospace
{class Foo{public:Foo();virtual ~Foo();};
}
标签缩进
--indent-labels / -L
将void Foo() {while (isFoo) {if (isFoo)goto error;...
error:...}
}格式化为 (error 标签缩进,默认向左):void Foo() {while (isFoo) {if (isFoo)goto error;...error:...}
}
预处理块缩进
--indent-preproc-block / -xW
将#ifdef _WIN32
#include <windows.h>
#ifndef NO_EXPORT
#define EXPORT
#endif
#endif格式化为#ifdef _WIN32#include <windows.h>#ifndef NO_EXPORT#define EXPORT#endif
#endif
将预处理器条件语句缩进到与源代码相同的级别
--indent-preproc-cond / -xw
将isFoo = true;
#ifdef UNICODEtext = wideBuff;
#elsetext = buff;
#endif格式化为isFoo = true;#ifdef UNICODEtext = wideBuff;#elsetext = buff;#endif
宏定义块缩进
--indent-preproc-define / -w
将#define Is_Bar(arg,a,b) \
(Is_Foo((arg), (a)) \
|| Is_Foo((arg), (b)))格式化为#define Is_Bar(arg,a,b) \(Is_Foo((arg), (a)) \|| Is_Foo((arg), (b)))
注释缩进
--indent-col1-comments / -Y
将void Foo()\n"
{
// commentif (isFoo)bar();
}格式化为void Foo()\n"
{// commentif (isFoo)bar();
}
多行缩进
--min-conditional-indent=# / -m#
0 - 无最小缩进。这些行将与前一行的 paren 对齐
1 - 至少缩进一个额外的缩进
2 - 至少缩进另外两个缩进
3 - 至少缩进二分之一的额外缩进例如 --min-conditional-indent=0 / -m0将if (a < b|| c > d)
{foo++;
}格式化为if (a < b|| c > d)
{foo++;
}
连续行缩进
--max-continuation-indent=# / -M#
# 表示列数,不得少于 40 或 大于 120。默认为 40将fooArray[] = { red,green,blue };fooFunction(barArg1,barArg2,barArg3);格式化为fooArray[] = { red,green,blue };fooFunction(barArg1,barArg2,barArg3);
空行设置
--break-blocks / -f
在 if for while .. 等代码块前后加上空行将isFoo = true;
if (isFoo) {bar();
} else {anotherBar();
}
isBar = false;格式化为isFoo = true;if (isFoo) {bar();
} else {anotherBar();
}isBar = false;
--break-blocks=all / -F
在 if for while .. 等代码块前后加上空行,同时在 'else', 'catch' 前加上空行将isFoo = true;
if (isFoo) {bar();
} else {anotherBar();
}
isBar = false;格式化为isFoo = true;if (isFoo) {bar();} else {anotherBar();
}isBar = false;
运算符前后加空格
--pad-oper / -p
将if (foo==2)a=bar((b-c)*a,d--);格式化为if (foo == 2)a = bar((b - c) * a, d--);
逗号后加空格
--pad-comma / -xg (设置了 --pad-oper / -p 就不需要此设置)
将if (isFoo(a,b))bar(a,b);格式化为if (isFoo(a, b))bar(a, b);
在 ! 后加空格
--pad-negation
将if (!isFoo(a,b))bar(a,b);格式化为if (! isFoo(a, b))bar(a, b);
在 ! 前加上空格
--pad-negation=before
将if (!isFoo(a,b))bar(a,b);格式化为if ( ! isFoo(a, b))bar(a, b);
关键字/函数名和括号间加空格
--pad-header / -H
将if(isFoo((a+2), b))bar(a, b);格式化为if (isFoo((a+2), b))bar(a, b);
删除多余空格
--unpad-paren / -U
将if ( isFoo( ( a+2 ), b ) )bar ( a, b );格式化为if(isFoo((a+2), b))bar(a, b);
--squeeze-ws
将void Foo ()
{foo1 = 1;
}格式化为void Foo ()
{foo1 = 1;
}
删除函数或方法中的空行
--delete-empty-lines / -xe
将void Foo()
{foo1 = 1;foo2 = 2;}格式化为void Foo()
{foo1 = 1;foo2 = 2;
}
删除超过给定数字的多余空行
--squeeze-lines=#
将void Foo()
{foo1 = 1;
}void Foo2()
{foo1 = 1;
}格式化为void Foo()
{foo1 = 1;
}void Foo2()
{foo1 = 1;
}
设置指针或引用运算符的位置
--align-pointer=type / -k1
--align-pointer=middle / -k2
--align-pointer=name / -k3
align-pointer=type将char* foo1;
char & foo2;
string ^s1;格式化为char* foo1;
char& foo2;
string^ s1;/
align-pointer=middle将char* foo1;
char & foo2;
string ^s1;格式化为char * foo1;
char & foo2;
string ^ s1;/
align-pointer=name将char* foo1;
char & foo2;
string ^s1; 格式化为char *foo1;
char &foo2;
string ^s1;
引用与指针分开对齐
--align-reference=none / -W0
--align-reference=type / -W1
--align-reference=middle / -W2
--align-reference=name / -W3
align-reference=type
将char &foo1;格式化为char& foo1;///
align-reference=middle将char& foo2;格式化为char & foo2;///
align-reference=name将char& foo3;格式化为char &foo3;
else 块设置
--break-closing-braces / -y (与 --style=java, --style=kr, --style=stroustrup, --style=linux, or --style=1tbs 一起使用时有效)
将void Foo(bool isFoo) {if (isFoo) {bar();} else {anotherBar();}
}格式化为void Foo(bool isFoo) {if (isFoo) {bar();}else {anotherBar();}
}
else if 块设置
--break-elseifs / -e
将if (isFoo) {bar();
}
else if (isFoo1()) {bar1();
}
else if (isFoo2()) {bar2();
}格式化为if (isFoo) {bar();
}
elseif (isFoo1()) {bar1();}elseif (isFoo2()) {bar2();}
单行代码添加大括号
--add-braces / -j
将if (isFoo)isFoo = false;格式化为if (isFoo) {isFoo = false;
}
单行代码删除大括号
--remove-braces / -xj
将if (isFoo)
{isFoo = false;
}格式化为if (isFoo)isFoo = false;
返回类型单独一行
--break-return-type / -xB
--break-return-type-decl / -xD
将void Foo(bool isFoo);格式化为void
Foo(bool isFoo);
返回类型和函数名在一行
--attach-return-type / -xf
--attach-return-type-decl / -xh
将void
Foo(bool isFoo);格式化为void Foo(bool isFoo);
删除注释块中多余的 *
--remove-comment-prefix / -xp
将/** comment line 1* comment line 2*/格式化为/*comment line 1comment line 2
*/
其他选项
备份文件后缀
--suffix=####
不备份原始文件
--suffix=none / -n
排除文件夹
--exclude=####