在Source insight4.0上配置Astyle(格式化代码)

在Source insight4.0上配置Astyle(格式化代码),第1张

在Souce insight上选择Tools->Custom Commands,点击Add,输入Astyle,点击OK。

在Run中输入C:\AStyle\bin\AStyle.exe --style=ansi -S -N -L -xC80 -z2 --convert-tabs -H -p -U --align-pointer=name --quiet --suffix=none %f

如下图所示:

完成后点击Close。

在Source insight选择Options->Menu Assignments,在Command中选择Astyle,在Menu中选择View,在Menu Contents中选择Toolbars,然后点击Insert,如下图所示。

点击Insert,点击OK,完成。

在Source insight中选择Options->Key Assignments,源羡在Command中选择Astyle,点击Assign New Key,然后输入一个快捷键(我使用的是Ctrl+Alt+F),如下图所示。

点击OK后完成快捷键的配置。

Asytle是完全可以脱离Source insight来单独使用的,这里仅说明如何在Source insight中使用源圆Asytle。

在上面的步骤中,我们配置了快捷键,只要打开想格式化的.c或者.h文件,按下快捷键,如果配置无误,文件就会被格式化,然后Source insight会提示重新载入这个文件,动手试一下吧。

Astyle提供雹裂塌了很多参数供大家使用,通过配置这些参数,我们可以将文件格式化成我们想要的形式。

我使用的是

更多的参数,可以直接在命令行中输入

就可以看到了。

Astyle并不是万能的格式化工具,只能支持一些典型的格式化,例如:

用source insight 编辑代码时,苦于source insight没有集成的代码格式化工具, GNU的astyle是一个免费的代码格式化工具,能够整理符合c/c++规范。

我们可以将astyle.exe外挂到SourceInsight中。详细步扰余唯骤如下:

1:从 /astyle sourceforge net上下载AStyle_2.01_windows.zip (开放源码,可以仔细阅读);

2:解压缩后将bin文件夹下的astyle.exe放到source insight目录下(自己可以放在任意位置)

在SourceInsight菜单栏里,Options-->Custom Commands界面上选择:Add,在d出对话框写入 Astyle.

3:在run中添加astyle.exe --style=ansi %f,其中,如果astyle.exe所在路径中有空格,必须用""括起来,参数--style=ansi 代表ansi C 格式(如缓培果你需要格式化java代码,这个地方改为:--style=java),"%f"是指作用于当前文件,这个必须的.其它命令参数可以参考astyle的帮助参数可以查看网页

4:此外,在此界面上还可以为这个命令设置快捷键,点击"keys",添加你觉得方便的按钮;

5:在SourceInsight菜单栏里,Options-->Menu Assignments界面上,将这个命令名称为Astyle添加到某工具栏下,我是依然放在了view下,在左面的Command列表里找到我们刚才添加的"Astyle",在右面的Menu中选择你要加到那个菜单下,这里我加到"view"下,可以在"Menu Contents"选择适当位置,点击"insert"即可。

1. 格式化从根开始的整个项目

AStyle.exe -A1 -R ./*.c ./*.h -bt4 -Sw -fpxHU -Jk3 -n %f

参数 意义

Predefined Style Options

-A1 代表 --style = ansi or allman模式

Tab and Bracket options

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

-t4 代表 each tab as 4 spaces

Indentation options

-S 代表 switch开关语句,以便于使case x: 对自动对齐

-w代表 用“/”对齐多行参数

Padding options

-f 代表 不相关的代码之间加空行

-p 代表 双目运算符前后加上空格,如:+ - * /

-x 代表 删除相关语句之是的空行. 如:if, else语句间的空行

-H 代表 在if, for, while关键字与括号()之间加上空格

-U 代表 移除括号两边不必要的空格

Formatting options

-J 代表 为单行语句加上{}

-k3代表 指针及引用(*, &)符号,挨着变量名

Other option

-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

void Foo(bool isFoo)

{

if (isFoo)

{

bar()

}

else

{

anotherBar()

}

}

--indent=tab / --indent=tab=# / -t / -t#

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

--indent-switches / -S

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

switch (foo)

{

case 1:

a += 1

break

case 2:

{

a += 2

break

}

}

becomes:

switch (foo)

{

case 1:

a += 1

break

case 2:

{

a += 2

break

}

}

--indent-preprocessor / -w

用“/”对齐多行参数

#define Is_Bar(arg,a,b) /

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

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

becomes:

#define Is_Bar(arg,a,b) /

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

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

--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

--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

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

void Foo()

{

foo1 = 1

foo2 = 2

}

becomes:

void Foo()

{

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 (with no padding option requested):

if(isFoo(a, b))

bar(a, b)

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

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

if (isFoo)

isFoo = false


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12290640.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存