您的位置:首页 > 编程语言

如何在source insight中使用astyle的代码整理功能?

2011-04-23 14:14 501 查看
用sourceinsight编辑代码时,苦于sourceinsight没有集成的代码格式化工具,GNU的astyle是一个免费的代码格式化工具,能够整理符合c/c++规范。
我们可以将astyle.exe外挂到SourceInsight中。详细步骤如下:

1:从http://astyle.sourceforge.net上下载AStyle_2.01_windows.zip(开放源码,可以仔细阅读);
2:解压缩后将bin文件夹下的astyle.exe放到sourceinsight目录下(自己可以放在任意位置)
在SourceInsight菜单栏里,Options-->CustomCommands界面上选择:Add,在弹出对话框写入Astyle.
3:在run中添加astyle.exe--style=ansi%f,其中,如果astyle.exe所在路径中有空格,必须用""括起来,参数--style=ansi代表ansiC格式(如果你需要格式化java代码,这个地方改为:--style=java),"%f"是指作用于当前文件,这个必须的.其它命令参数可以参考astyle的帮助参数可以查看网页http://astyle.sourceforge.net/astyle.html
4:此外,在此界面上还可以为这个命令设置快捷键,点击"keys",添加你觉得方便的按钮;
5:在SourceInsight菜单栏里,Options-->MenuAssignments界面上,将这个命令名称为Astyle添加到某工具栏下,我是依然放在了view下,在左面的Command列表里找到我们刚才添加的"Astyle",在右面的Menu中选择你要加到那个菜单下,这里我加到"view"下,可以在"MenuContents"选择适当位置,点击"insert"即可。

1.格式化从根开始的整个项目
AStyle.exe-A1-R./*.c./*.h-bt4-Sw-fpxHU-Jk3-n%f
参数意义
PredefinedStyleOptions
-A1代表--style=ansiorallman模式

TabandBracketoptions
-b代表语句块之前加上空格
-t4代表eachtabas4spaces

Indentationoptions
-S代表switch开关语句,以便于使casex:对自动对齐
-w代表用“/”对齐多行参数

Paddingoptions
-f代表不相关的代码之间加空行
-p代表双目运算符前后加上空格,如:+-*/
-x代表删除相关语句之是的空行.如:if,else语句间的空行
-H代表在if,for,while关键字与括号()之间加上空格
-U代表移除括号两边不必要的空格

Formattingoptions
-J代表为单行语句加上{}
-k3代表指针及引用(*,&)符号,挨着变量名

Otheroption
-n代表不生成备份。默认生成.orig文件
-R代表目录递归

注:
格式化从根开始的整个项目,指的是把整个项目里的所有.c.h文件都格式化。打开工程目录,插件会自动识别出项目的根目录的。格式化后,这个项目就会全部更改。而且在格式化的过程中,会很消耗时间。
造成的后果:在进行SVN提交时,由于先前的SVN代码与此不同,会进行大面积的更改。如果修改了格式化选项,还会造成代码的重新提交。如果大量文件产生格式问题,会把实际修改的内容掩盖掉,在回溯记录进行问题确认时,会产生麻烦。容易忽略了主要问题。
建议:尽量少用此选项。如果为了使用整个项目更规范,可以使用此选项。提交单个文件时最好不要使用此选项。

2.格式化当前目录下的.c文件
AStyle.exe-A1-R./test/*.c-bt4-Sw-fpxHU-Jk3-n%f
参数意义从略,看上面.
-R后面添加所修改工程的路径,及文件名,就可以执行只格式化该目录下的.c文件。路径中的是用“/”or“/”都可以录找到路径。

建议:在进行工程项目部分模块开发时,如果为了使这部分项目模块更规范,可以使用此选项。对于频繁修改少量多个文件。可以使用此选项,以实现批处理文件的功能。

3.
格式化单个文件

AStyle.exe-A1-bt4-Sw-fpxHU-Jk3-n%f
参数从略,看上面
只进行当前修改文件的格式化处理。只针对单个文件起作用。这样很容易使所写文件更加的规范。在编写代码过程中,可以省去很多调整代码结构的时间,是最常用的选项。

建议:在平时编写代码时,尽量使用此选项。只对单个文件进行处理,不会影响其它文件。
在SVN进行提交时,影响最小。










下面是各选项的效果,如果个人有需要,可以按其效果进行更改参数,可能会造成多人编写代码的样式不同。


--recursive/-r/-R

在每个目录下执行命令。可以处理所有子目录下的文件。当用此选项时,文件名应当包含通配符,应当指名路径,名称。以便shell会执行。e.g."$HOME/src/*.cpp"


--brackets=break/-b


voidFoo(boolisFoo)

{

if(isFoo)

{

bar();

}

else

{

anotherBar();

}

}



--indent=tab/--indent=tab=
#
/-t/-t
#
对齐使用tab字符。每个tab代表#个spaces(e.g.
-t
6/
--indent=tab=
6)#必须在2-20之间,如果不设置,就当作4个space
s.




--indent-switches/-S

switch开关语句,以便于使casex:对自动对齐。

switch(foo)

{

case1:

a+=1;

break;


case2:

{

a+=2;

break;

}

}

becomes:
switch(foo)

{

case1:

a+=1;

break;


case2:

{

a+=2;

break;

}

}



--indent-preprocessor/-w


用“/”对齐多行参数

#defineIs_Bar(arg,a,b)/

(Is_Foo((arg),(a))/

||Is_Foo((arg),(b)))

becomes:
#defineIs_Bar(arg,a,b)/

(Is_Foo((arg),(a))/

||Is_Foo((arg),(b)))[code]
[/code]


--break-blocks/-f


在关键字if,for,while与()之间填充空格,在不相关代码之间加上空行

isFoo=true;

if(isFoo){

bar();

}else{

anotherBar();

}

isBar=false;

becomes:
isFoo=true;


if(isFoo){

bar();

}else{

anotherBar();

}


isBar=false;[code]
[/code]


--pad-oper/-p


在各双目运算符的前后分别加上空格,行末会保持原样。

if(foo==2)

a=bar((b-c)*a,d--);

becomes:
if(foo==2)

a=bar((b-c)*a,d--);



--delete-empty-lines/-x

删除函数里边的空行。函数外面的空行不会被删除。

voidFoo()

{


foo1=1;


foo2=2;


}

becomes:
voidFoo()

{

foo1=1;

foo2=2;

}

--pad-header/-H

在关键字‘if’,‘for’,‘while’..与括号之间填充空格。任何行注释的末尾都会保留原始列。

if(isFoo(a,b))

bar(a,b);

becomes:
if(isFoo(a,b))

bar(a,b);



--unpad-paren/-U

移除括号里边和外边的的无用空间

if(isFoo(a,b))

bar(a,b);

becomes(withnopaddingoptionrequested):
if(isFoo(a,b))

bar(a,b);



--add-one-line-brackets/-J

为‘if’,‘for’,‘while’里的单行语句加上{}。这条语句只能和{}在同一行。如果相变成不同行,需要手动修改。

if(isFoo)

isFoo=false;

becomes:
if(isFoo)

{isFoo=false;}



--align-pointer=type/-k1

--align-pointer=middle/-k2

--align-pointer=name/-k3

对齐指针,引用(*or&)的标号位置,使其位于变量类型一侧或变量名一侧,也可以处在类型与名称之间。

char*foo1;

becomes(withalign-pointer=type):
char*foo1;

char*foo2;

becomes(withalign-pointer=middle):
char*foo2;

char&foo3;

becomes(withalign-pointer=name):
char&foo3;



--suffix=none/-n


不保留文件的备份文件。文件在格式化之后,原始文件会清除



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: