如何在source insight中使用astyle的代码整理功能
一、将AStyle_2.02.1_windows.zip解压到Keil安装目录下。
二、打开Keil 软件,选择Tools菜单下的CustomizeTools Menu选项。
参考Keil µVision4User's Guide进行设置
四、新建插件,命名AStyleCurrent File(可以任意名字),
Command:输入AStyle.exe文件的路径,或点击到Keil\AStyle\bin目录下选择AStyle.exe。
Arguments:输入-p!E,其中!E表示将当前代码格式化,-p 表示在操作符两边添加空格,注意-p与!E之间有个空格,p为小写字母。
五、插件安装好了,应该怎么使用呢?
程序编写完成后,单击Tools菜单下的AStyleCurrent File,
BuildOutput 窗口显示已经格式化当前C文件,运行后,文件就是标准的C代码格式了,是不是很神奇呢
还可以添加
Astyle
All Files菜单 填写 "$E*.c" "$E*.h"
这可以格式化同文件下所有.c和.h的文件。
我这里要介绍的功能叫"new-omni-completion(全能补全)", 你可以用下面的命令看看介绍:
:help new-omni-completion
你还需要在~/.vimrc文件中增加下面两句:
filetype plugin indent on
打开文件类型检测, 加了这句才可以用智能补全
set completeopt=longest,menu
关掉智能补全时的预览窗口
请确定你的Ctags 已经安装好, 并且生成的tags文件已经可以用了, 那么我们就要抄家伙开搞了.
用vim打开源文件
$ vim /home/wooin/vim71/src/main.c (linux下的,文件是一样的。)
设置tags文件
:set tags=/home/wooin/vim71/tags
随便找一个有成员变量的对象, 比如"parmp",
进入Insert模式, 将光标放在"->"后面,
然后按下"Ctrl+X Ctrl+O",, 显示所有匹配的标签,。
如果你增加了一些成员变量, 全能补全还不能马上将新成员补全, 需要你重新生成一下tags文件, 但是你不用重启vim, 只是重新生成一下tags文件就行了,
这时全能补全已经可以自动补全了。
vim中的其他补全方式还有:
Ctrl+X Ctrl+L 整行补全 Ctrl+X Ctrl+N
根据当前文件里关键字补全
Ctrl+X Ctrl+K
根据字典补全 Ctrl+X Ctrl+T
根据同义词字典补全
Ctrl+X Ctrl+I
根据头文件内关键字补全 Ctrl+X Ctrl+]
根据标签补全
Ctrl+X Ctrl+F
补全文件名 Ctrl+X Ctrl+D
补全宏定义
Ctrl+X Ctrl+V
补全vim命令 Ctrl+X Ctrl+U
用户自定义补全方式
Ctrl+X Ctrl+S
拼写建议
是不是还是觉得没有tab方便?好的,人家开发了一个叫做supertab.vim这个插件。安装后,
在你的~/.vimrc文件中加上这两句:
let g:SuperTabRetainCompletionType=2
let g:SuperTabDefaultCompletionType=""
以后当你准备按"Ctrl+X
Ctrl+O"的时候直接按就好了,这下你满足了吧。
我稍微再介绍一下上面那两句配置信息:
let g:SuperTabDefaultCompletionType=""
" 设置按下后默认的补全方式, 默认是, “
现在改为. 关于的补全方式,
" 还有其他的补全方式,
你可以看看下面的一些帮助:
" :help ins-completion
" :help compl-omni
let g:SuperTabRetainCompletionType=2
" 0 -
不记录上次的补全方式
" 1 - 记住上次的补全方式,直到用其他的补全命令改变它
" 2 - 记住上次的补全方式,直到按ESC退出插入模式为止
我们可以将astyle.exe外挂到SourceInsight中。详细步骤如下:
1:从http //astyle sourceforge net上下载AStyle_2.01_windows.zip (开放源码,可以仔细阅读);
2:解压缩后将bin文件夹下的astyle.exe放到source insight目录下(自己可以放在任意位置)
在SourceInsight菜单栏里,Options-->Custom Commands界面上选择:Add,在弹出对话框写入 Astyle.
3:在run中添加astyle.exe --style=ansi %f,其中,如果astyle.exe所在路径中有空格,必须用""括起来,参数--style=ansi 代表ansi C 格式(如果你需要格式化java代码,这个地方改为:--style=java),"%f"是指作用于当前文件,这个必须的.其它命令参数可以参考astyle的帮助参数可以查看网页http //astyle sourceforge net/astyle.html
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;
becomes:
if (isFoo)
{ isFoo = false; }
--align-pointer=type / -k1
--align-pointer=middle / -k2
--align-pointer=name / -k3
对齐指针,引用(* or &)的标号位置,使其位于变量类型一侧或变量名一侧,也可以处在类型与名称之间。
char *foo1;
becomes (with align-pointer=type):
char* foo1;
char* foo2;
becomes (with align-pointer=middle):
char * foo2;
char & foo3;
becomes (with align-pointer=name):
char &foo3;
--suffix=none / -n
不保留文件的备份文件。文件在格式化之后,原始文件会清除
比霞吉祥: Source Insight是一款面向项目开发的代码编辑浏览器,它可以自动同步分析相关源码,为我们的开发提供了很大便利.下面介绍一下source insight是如何使用的.如何使用source insight 工具/原料 source insight软件 需要浏览的工程代码 安装...
容县18662147603: source insight怎么用 - ?
比霞吉祥: 首先,介绍一下source insight的安装,百度搜索source insight,找到相关软件,下载安装.如何使用source insight 版本:3.5.72.0可使用于 环境:WinXP/Vista/Win7/Win8 安装比较简单,过程省略.END 如何创建工程 打开source insight,点击...
容县18662147603: 如何在 Source Insight 中编译和执行Java 程序 - ?
比霞吉祥: 由于 Source Insight 的代码易读的优越性能,,使用 Source Insight 编辑 Java 代码是一个不错的选择,当然它不能与专业的 Eclipse 及 Netbeans 这样的IDE 相比; 本人使用它是因为 Source Insight 的体积比较小,可以自定义设置用户命令,用...
容县18662147603: source insight怎么添加工程 - ?
比霞吉祥: 一般使用source insight编写代码,以配合keil工程为例(keil自带的编辑器对齐不好,编写代码比较费劲,阅读代码就更费劲了,但必须使用keil的编译器).先通过keil建立工作,然后在工程文件夹下建立SI文件夹. 然后打开source insight新建...
容县18662147603: 如何在source insight中显示行数 - ?
比霞吉祥: 2种方法:1、直接在编辑区点右键,在弹出的菜单中选择有line numbers(打钩);2、点击菜单栏view --> Line Numbers,即可.
容县18662147603: 怎么使用source Insight进行字符串全局搜索 - ?
比霞吉祥: 请参看下面的图文教程《怎么使用source Insight进行字符串全局搜索》http://jingyan.baidu.com/article/76a7e409d62b46fc3b6e1586.html 首先,选中并复制想要查找的字符串,这里我们选择查找的字符串是“list_head” 接着选择功能面板上的...
容县18662147603: 如何在source insight中添加一个程序 - ?
比霞吉祥: 首先我们在菜单栏中我们找到【Project】,并点击,如图示.2 然后在弹出的菜单栏中选择【New Project】,如图示.3 这个时候,会弹出一个对话框,然后我们在【New project name】中为你的项目起一个名字.在下面的对话框中选择一个你想要将工程保存位置.然后点击OK.4 然后我们选择你代码存放的位置,然后点击OK,如图示.5 然后选择你代码的文件,点击【Add】或者【Add All】.6 这个时候,会弹出一个对话框,我们点击【OK】,如图示.这个时候,会弹出一个对话框询问是有多少个文件加入工程,然后点击【确定】.7 最后,我们点击【Close】,即可.
容县18662147603: 如何使用source insight把文件夹显示出来 - ?
比霞吉祥: 如何使用source insight把文件夹显示出来 main() { char c; while(c!=13) /*不是回车符则循环*/ { c=getch(); if(c==0X1B) continue; /*若按Esc键不输出便进行下次循环*/ printf("%c\n", c); } } 6.9 程序举例 【例6.10】用 公式求π. N-S流程图: #...
容县18662147603: 如何在linux下安装source insight - ?
比霞吉祥: Linux上安装Source Insight需要用Wine来安装,因为Source Insight没有Linux版,安装好了以后Source Insight的运行也需要Wine,还好,Source Insight用Wine在Linux上运行得相当不错. 首先安装Wine要用以下命令,注意需要root用户身份运行...