Source Insight的应用技巧、宏功能

目录

1 简介... 5

2 搭建我们的SI环境... 5

2.1 搭建步骤... 5

2.2 说明... 6

3 应用技巧... 6

3.1 初级应用技巧... 6

3.1.1 解决字体不等宽与对齐的问题... 6

3.1.2 把TAB变成4个空格... 7

3.1.3 更改背景色... 7

3.1.4 自动对齐设置: 7

3.1.5 显示坐标... 7

3.1.6 创建快捷键快乐工作... 7

3.2 中级应用技巧... 8

3.2.1 查找... 8

3.2.1.1 Loopup References 8

3.2.1.2 Search Files 9

3.2.1.3 Search Project 9

3.2.2 替换... 9

3.2.2.1 单文件替换... 9

3.2.2.2 多文件替换... 9

3.2.3 列操作... 9

3.2.4 Edit Condition. 9

3.3 高级应用技巧... 10

3.3.1 Source Link. 10

3.3.2 智能重命名(Smart Rename) 10

3.3.3 Renumber 11

3.3.4 SI中正则表达式... 11

3.3.4.1 通配符... 11

3.3.4.2 表达式中的组... 12

4 Quicker宏在SI中的使用... 12

4.1 如何配置 Quicker 宏... 12

4.2 几个常用的 Quicker 宏... 12

4.2.1 标准说明生成... 13

4.2.1.1 config (co) 配置用户名和标题的说明语种... 13

4.2.1.2 file (fi) 生成标准的文件头... 13

4.2.1.3 func (fu) 生成标准的函数头说明... 13

4.2.1.4 hi 增加修改历史列表... 13

4.2.1.5 hd 自动生成函数头文件... 13

4.2.1.6 Hdn 生成新的有文件... 13

4.2.2 代码修改注释... 13

4.2.2.1 pn 添加问题单号... 13

4.2.2.2 ap 添加问题单修改说明... 13

4.2.2.3 ab 添加开始说明... 14

4.2.2.4 ae 添加结束命令... 14

4.2.2.5 abg 插入添加开始和结束说明... 14

4.2.2.6 db 删除开始命令... 14

4.2.2.7 de 删除结束命令... 14

4.2.2.8 dbg 插入删除开始和结束说明... 14

4.2.2.9 mb 修改开始命令... 14

4.2.2.10 me 修改结束命令... 15

4.2.2.11 mbg 插入修改开始和结束说明... 15

4.2.3 其余几个常用宏... 15

4.2.3.1 将从C++的 // 注释改为标准的C /* */注释... 15

4.2.3.2 能自动将Tab转换成空格(mstp_out.c)... 15

4.2.3.3 插入当前的函数名... 15

4.2.3.4 自动在函数入口、出口插入、删除打印函数... 15

4.2.3.5 自动格式当前行... 16

4.2.3.6 更新函数列表... 16

4.2.3.7 复合语句删除... 16

5 附录... 17

5.1 SI默认快捷键汇总... 17

5.2 推荐格式... 20

6 参考文献... 20

7 联系方式... 20

1 简介

套用下网上有人对SI(即Source Insight)的评价:

Windows下开发人员的至爱,功能强大,界面友好。支持语法高亮、符号跳转,还支持函数调用关系图显示。这是一个专业的编程环境,很多大公司都是使用它的。这个编辑器除支持完善的自定义功能外,几乎所有配置都能作个性化配置。除此之外,它本身带有一套功能强大的宏语言(Macro Language),借助这种语言可以很方便的编程实现各种特殊功能,非一般编辑器所能比拟。查找功能支持得也很不错。虽然在工程较大时,查找起来有点慢。但是它除了一般编辑器所支持的普通字符串查找、正则表达式查找外,还能支持关键字查找-这种方式比前两者快得多,也算是一个弥补。不足之处是列模式较弱,对中文支持有缺陷。

本文主要讨论如下几点:

Ø 如何搭建一个方便我们编程人员的SI环境;

Ø SI使用中有哪些常用且好用的技巧;

Ø SI的宏功能是怎么回事?我们如何使用它?

特别声明:本文是本人根据网上搜索到的相关文献,结合自己的使用习惯,编写而成的,若触犯到您的权利,请联系我,联系方式见文章最后,谢谢!

[原创文章,转载请保持文章完整,并注明出处。更多精彩文章请访问http://blog.****.net/sikinzen]

2 搭建我们的SI环境

这一章我们直接讨论怎么将SI搭建成我最终设定的“良好”开发环境,至于其中的原理,请看后续几章。

2.1 搭建步骤

1. 使用UltraEdit工具修改Quicker.em文件

查找 “InsertFileHeaderEN” 和 “InsertFileHeaderCN” 两个函数,将其中的公司信息更改为相应的信息。

2. 安装 Quicker.em宏

Ø 将Quicker.em文件拷贝到SI安装后在“我的文档”下生成的目录,如:【…/My Documents/Source Insight/Projects/Base】;

Ø 运行SI,打开Base工程,如果没有该工程,则生成它,将Quicker.em加入到工程中;

Ø 安装触发热键和菜单,打开SI的Options的Key Assignments菜单,在Command窗口中选择Macro: AutoExpand然后对其赋一个热键,例如Ctrl Enter;

Ø 在任意一个打开的文件中输入 “config”,而后敲入上一步骤赋予的热键,根据提示选择 语言 并输入 用户名;请注意:用户名不能使用中文,不支持。

Ø 配置ok。

3. 安装配置文件

选择Options的Save Configuration先保存自己的配置,以便回退,回退时选择Options的Load Configuration来装载该配置;

将SIKINZEN_GLOBAL.CF3文件拷贝到:【…/My Documents/Source Insight/Settings】下;

选择Options的Load Configuration来装载SIKINZEN_GLOBAL.CF3配置文件,出现导入的对话框,勾选All configuration settings;

2.2 说明

通过如上步骤,我们的SI做了两方面的变化:

1. 更改了SI的界面显示

主要有:设置字体为等宽、更改SI的背景色等,这方面请看第三章。

2. 增加新功能

通过 宏文件,我们给SI增加了自动添加文件头、自动根据源文件生成头文件、自动生成while语句等很多编程人员喜欢的功能;关于这方面,请看第四章。

3 应用技巧

3.1 初级应用技巧

3.1.1 解决字体不等宽与对齐的问题

恐怕这是大部分朋友在使用SI中碰到的第一个问题:在UltrEdit等软件中对齐得很好的代码到了SI中就都乱了,这原因主要有两个:一个是SI采用的不等宽字体原因,另一个是SI中Tab键等效的空格数与UE中不同;

解决办法如下:

Ø SI 的默认字体是Verdana的,它是一变宽字体,请在Document style中可以将字体改为定宽的Courier New;

Ø Options-> Document Options里面的右下角Editing Options栏里,确保Tab Width=4,然后确定。现在TAB键的缩进和四个空格的缩进在SIS里面看起来就对齐了;

一般来说,设置这两项就ok了,但笔者发现:在我的SI中,这还没完!SI中C代码的注释中仍然是不对其的,解决办法如下:

Ø 打开一个C程序,在Options-> Style Properties页面中,选择左边的”Comment”项,看到右边的”Font Name” 项了吗?如果是Verdana这种不等宽字体的话,将之改为”=”吧。

在很多公司(如华为)的编程规范里,都有不能用TAB键而必须用4个SPACE代替的说法。其实我慢讨厌这个规定的,不过以前写代码时很头痛的问题确实是在SI界面中的tab键对齐中,即使设置好了Tab Width=4,按四个空格所显示的缩进,和按TAB键的缩进位置就是不同,后者要更靠里面三个字符的位置,但在左下角看到的Col=5都是一样的。这样的代码在SI里看了不对齐,到UE里看了却是对齐的。而SI里面看着对其的代码,在UE里面会差三格。这就是没有设置上述第二项的原因。

3.1.2 把TAB变成4个空格

Ø Options-> Document Options里,选上 Expand Tabs,并确保 Tab width = 4;

Ø 如果需要把已经编辑成Tab的文本转换,先选中所有文本,"Edit" - "Special Edit" - "Tabs to Spaces"。

这里还有一个在使用中把TAB键编程空格的方法:

Ø Options/Document Options页面Expand tabs选项选中的话,则以后按tab时将转换为空格。

3.1.3 更改背景色

更改SI使用的windows background背景色为灰色,不伤眼(白色对眼睛的伤害最大)。

3.1.4 自动对齐设置:

在C程序里, 如果遇到行末没有分号的语句,如IF、WHILE、SWITCH等,写到该行末按回车,则新行自动相对上一行缩进两列。

Option->Document option下的Auto Indient中Auto Indient Type有三种类型 None、Simple和Smart。个人推荐选用Simple类型,或者选择Smart,但不勾选Smart Indent Options中的两个可选项。

3.1.5 显示坐标

通常情况下在窗口状态栏左下方,会显示当前光标所在行列信息,但我们可以更彻底点: 选择Options/Document Options页面,勾选其中的Show line numbers,同时勾选其中的Show right margin,我们就可显示一条右边界,随时提醒我们是否该行代码写得过长了。

3.1.6 创建快捷键快乐工作

1. 恢复ctrl+a的全选功能

在SI的Options的Key Assignments菜单种,在Command窗口中通过关键词save 找到save all,更改为ctrl+shift+a,通过关键词select找到select all,更改为ctrl +a;

2. Source Insight常用的快捷键:

Ø Ctrl+F:本文件内查找;

Ø Ctrl+H:替换文本;

Ø F9:左边缩进;

Ø F10:右边缩进;

Ø F3:本文件查找结果的上一个:

Ø F4:本文件查找结果的下一个;

Ø F5 或者 CTL+G:指定行号,实现行跳转,在遇到编译错误的时候,能特别方便的找到出错行;

Ø Shift+F8:高亮显示指定标识,快速浏览标识的使用情况;

Ø Ctrl +/ :Look up reference;

Ø F7:打开Browse Project Symbols窗口,快速浏览工程内标识定义;

Ø F8:浏览本地语法(弹出该文件语法列表窗口,如果你光标放到一个变量/函数等,那么列出本文件该变量/函数等的信息) ;

Ø Ctrl+I:插入一行;

Ø Ctrl+K:复制一行;

Ø Ctrl+U:剪切一行;

Ø Home:到行首;

Ø End:到行尾;

Ø Ctrl+Home:到文件头;

Ø Ctrl+End:到文件底部;

Ø Shift+F6:选择一行;

Ø Shift+F5:选择一个单词;

Ø Ctrl+Tab, Ctrl+Shift+Tab:最后一个窗口;

3.2 中级应用技巧

3.2.1 查找

3.2.1.1 Loopup References

我们最常用的一种查找方式是选择Search/Lookup References或按Ctrl+/组合键再或者鼠标点 R 按钮,在弹出的Loopup References窗口进行查找操作。 在Search Method中有四种可选的查找方式:Simple String、Regular Expression、 Keyword Expression和Look Up Reference。其中Simple String是最普通的查找方式,可以查找文件中出现的任意字符或字符,甚至可以查找 _upap || u 这样的字符串,但是在工程较大时,查找过程会较慢。 Regular Expression查找方式将在后面讲述正则表达时会介绍到,这里暂时按下不表。 Keyword Expression和Look Up Reference查找的结果基本相同,但是显示方式略有差异。这两种方式都是使用SI预先建立的数据库,查找起来速度相当快。但通常这种速度只对在查找标识符时有明显效果。对于像函数名,变量名等的查找,强烈建议使用这两种方式进行查找。

3.2.1.2 Search Files

选择Search/Search Files或按Ctrl+Shift+F组合键,在弹出的Search Files窗口进行查找操作。 在File Name框中可以填入文件名或文件夹。注意当要查询的文件夹双包含子文件夹时,可以勾选Options中的Include Subdirectiories,实现对各层文件的递归搜索。

3.2.1.3 Search Project

选择Search/Search Project,在弹出的Search Project窗口进行查找操作。操作与Loopup References几乎完全一致,它们各自保存上次搜索的配置。

3.2.2 替换

3.2.2.1 单文件替换

选择Search/Replace或按Ctrl+H组合键,在弹出的Replace窗口进行查找操作。在Search项目里勾选Selection则仅对当前选中的文档部分进行替换。另外如果勾选了Confirm Replacements则是逐个确认替换,否则会同时替换所有符合替换条件内容。若点右边的Files…按钮,可选择替换多个文件的内容。

3.2.2.2 多文件替换

选择Search/Replace Files或按Ctrl+Shift+H组合键,在弹出的Replace Files 窗口进行查找操作。除了增加New框(替换后的内容)外,其余均与Search Files窗口相同,可参照查找部分的说明进行操作。

3.2.3 列操作

SI的列操作功能比较弱,但不等于没有。先按下Alt键,接着就可用鼠标进行列选择,然后就可以删除指定的列。

3.2.4 Edit Condition

很多代码尤其是驱动代码,当中有大量的预编译定义,以实现对不同硬件配置的支持。在阅读这样的代码时最痛苦的是不能简单判断程序实际执行的代码分枝。大量分枝同时存在,常常会混淆我们的视听。比如对于下面的代码:

#ifdef DEV1

/* DEV1代码代码 */

#else

/* 其它设备执行代码 */

#endif

如果确定我们当前分析的是DEV1的执行情况,那么可以选择Edit菜单的Edit Condition 选项,在弹出的Conditional Parsing窗口中把DEV1的值设置为True,那么 #ifdef DEV1就等价于#if 1了,相当注释掉了#else分枝的代码。反之,设置为Flase时,则注释掉#ifdef DEV1分枝的代码。

Source Insight的应用技巧、宏功能

注意:Edit Condition菜单选项必须手动添加到 Edit菜单中。

3.3 高级应用技巧

这节讨论的几个主题都属于SI的高级话题,很多我自己都没有完全搞明白,但毫无疑问的是:如果搞明白了,将使我们更加得心应手地使用SI。

3.3.1 Source Link

Source Link是解析日志信息时非常有用的一个功能。

总地说来,SourceLink根据特定的搜索模式,把当前文件中满足模式的行、链接到由该行指定的其他源文件中。

所谓特定的搜索模式,共有两种:“File, then line” 和 “Line, then file”,其中前后两部分依靠正则表达式的组的概念来予以分割。如果当前文件具有匹配行,比如“Error d:tcsrcq5.c 18: Lvalue required in function jsSort”,那么SourceInsight在该行创建SourceLink、把该行链接到由该行指定的文件中(即d:tcsrcq5.c,第18行)。

1. 创建SourceLink

运行Search菜单的Parse Source Links…命令,在弹出的框中、选择搜索模式、并填入相应的正则表达式串,点OK,SIS就会解析当前文件,如果有匹配,就创建SourceLink。

2. 在解析日志信息时,使用SourceLink

可以打开日志信息,运行Parse Source Links命令,日志中能够匹配模式的每一行(通常是含有错误信息的行)、就会被设置上一个SourceLink

3. 在解析自定义命令输出时,使用SourceLink

首先勾选Custom Command 中的“Parse Links in Output”,然后选择特定的搜索模式,最后填入合适的正则表达式。这样,Source Insight把输出信息作为当前搜索用文件;并且,如果有匹配行(通常即编译错误信息行),SIS为 该行创建SourceLink、并把每一个错误信息中给定的文件(和行号)作为link目的地,这对于我们修改源代码错误非常有帮助。

3.3.2 智能重命名(Smart Rename)

这一节的那个我没看明白,或许也是个鸡肋?不过看SI的帮助手册中,似乎蛮推崇的。

一般来说,普通的单文件替换命令已足以已满足工作要求。但SI还提供了 上下文敏感的全局搜索替换功能------智能重命名。

在Edit菜单中选Smart Rename或按Ctrl+’ 组合键,即可弹出Smart Rename窗口。它有很强大的功能,但最便捷的使用方式是更改函数内局部变量的名字,操作只作用于函数内部,速度非常快。

SourceInsight的搜索索引(search index)使得搜索过程进行地非常快。而且,使用Smart Rename所做的替换会被记录在Search Results窗口中,每一条替换记录旁有一个SourceLink链接到替换发生地文件。

3.3.3 Renumber

使用Ctrl+R将弹出Renumber窗口,这个用于处理数字顺序排列的情况相当有效,比如数组下标。例如现有代码:

array[0] = 1; array[1] = 2; array[2] = 3;

现在要改为

array[0] = 0; array[1] = 1; array[2] = 2; array[3] = 3;

当然可以一个个修改,但最快的方式是在array[0] = 1;之前添加array[0] = 0;,然后列选数组下标,使用Renumber功能以 0为起始值重填数值。

注:我在使用中实现不了上面这个例子。

3.3.4 SI中正则表达式

由于在查找及替换中,经常会使用用正则表达式,这里对SI的正则表达式进行简单介绍。

3.3.4.1 通配符

正则表达式通配符总表

Character

Matches

^ (在表达式开始处)

行的开始部分

.

任意单个字符

[abc]

任意属于集合 abc 的单个字符

[^abc]

任意不属于集合 abc 的单个字符

*

前面字符的0个或多个重复

+

前面字符的1个或多个重复

/t

一个 tab 字符

/s

一个空格符

/w

一个空白符(包括 tab 符和空格符)

$

行的结束部分

关于正则表达式,推荐查看《精通正则表达式》。

3.3.4.2 表达式中的组

在执行替换操作时,组将大有用武之地。正则表达式的各个部分可以用/(和/)进行分隔,分隔得到的每一项就是一个组。在进行替换时可通过组从匹配内容中抽取出特定串。在正则表达式中每个组都有一个编号,自左至右编号从1开始。

例如:abc/(xyx/)将能匹配 abcxyz ,此时组1就包含了 xyz 串。在进行替换操作时,就可以通过在替换后内容框中填入/1来取出这个字符串。推而广之,可以使用/<number>来取得组<number>所包含的串。

例如:当设定把/(abc/)/(xyz/)替换为/2/1的替换规则时,对于 abcxyz 被替换串,则组1包含 abc,组2包含 xyz,而替换后的内容定义为组2内容后跟组1内容(/2/1),因此将得到 xyzabc。

4 Quicker宏在SI中的使用

Marco是sourceinsight软件一个强大的功能(个人认为是最强大且有趣的功能),用户可以通过编写宏来实现自定义功能。这里有个比较流行的宏文件quicker.em,该宏文件提供的功能比较全,能满足开发的一般需求。通过该宏,我们可以实现 自动生成注释、自动生成.c对应的头文件等一大堆功能,提高开发效率。

顺道提下该宏的来源:该文件是华为的lushengwen(卢胜文,工号2万多)于2002年进行整理和开发的。后来该高手在2003年华三成立时划到了华三公司,不知道现在还在不在华三。呵呵。

所有Quicker.em定义的功能都可以在SI的Options工具菜单的Key Assignments对话框里通过macro关键字找到。

4.1 如何配置 Quicker 宏

具体搭建步骤请参考 2.1节。

对于宏FormatLine、UpdateFunctionList、InsertTraceInfo、InsertFuncName、ReplaceBufTab、ReplaceTabInProj和ComentCPPtoC等功能,可以根据情况定义为菜单或热键。

Quicker有两种命令,一种是扩展命令,一种是普通命令:

2 扩展命令:在代码文件中输入命令名,然后按前面AutoExpand宏所定义的热键来执行该命令;

2 普通命令:直接根据定义的热键或菜单来执行;

目前一般的扩展命令都对应有相应的普通命令。

4.2 几个常用的 Quicker 宏

完整的Quicker宏说明请参考《quicker.doc》,这里列出些个人觉得比较常用的Quicker宏。

4.2.1 标准说明生成

4.2.1.1 config (co) 配置用户名和标题的说明语种

用户名就是前面自动生成的作者,修改者的名字,语种,就是前面提到的文件头说明和函数头说明所采用的的语言有中文和英文两种选择

4.2.1.2 file (fi) 生成标准的文件头

自动生成如下格式,它能自动取得文件名,作者名,时间,以及函数列表,而且在生成的过程中会主动弹出功能描述能的内容输入对话框(提示对话框只能输入256个字符),输入的内容能够自动换行对齐,这样既可以避免遗漏说明,而且一般在详细设计中对每个文件的主要功能都有详细的描述,只要把这些描述 拷贝过来即可,它能自动排列好, 非常方便。

4.2.1.3 func (fu) 生成标准的函数头说明

其自动生成函数头,该函数必须在该函数的前一行执行,它能自动取得函数名,能够自动取得函数的输入、输出参数,并且排列好。能够 提示输入功能描述,输入的内容能够自动换行对齐,这样既可以避免遗漏说明,而且一般在详细设计中对每个函数的主要功能都有详细的描述,只要把这些描述 拷贝过来即可,它能自动排列好, 非常方便。 (因为SI的宏功能有限,没能自动加入调用函数和被调函数的功能)

如果不是在已存在的函数前执行则提示输入函数名,提示输入函数描述,提示输入返回值类型,提示输入函数入口参数,输完后按Esc退出

4.2.1.4 hi 增加修改历史列表

自动在该行增加修改历史列表,用于文件头和函数头说明中的历史记录更新。

注意:该功能不能在文件最后一行输入。

4.2.1.5 hd 自动生成函数头文件

该命令能够自动生成但前C文件的头文件定义,包括常用的宏定义,还有全部的函数原型定义。

4.2.1.6 Hdn 生成新的有文件

该命令能够自动生成指定的的头文件定义,包括常用的宏定义,提示输入函数原型的类型。

4.2.2 代码修改注释

4.2.2.1 pn 添加问题单号

在进行问题单修改时都要求在修改的地方注明问题单号和修改人以及修改时间,大部分一个问题单的修改都会涉及到几个地方,本功能提供自动取问题单号的功能,下面的几个命令所生成的问题单号就是由它提供,如果输入为#则不显示问题单号

4.2.2.2 ap 添加问题单修改说明

该命令提示输入问题单号和修改原因,生成如下格式的说明

4.2.2.3 ab 添加开始说明

它能自动生成如下说明:

1.有问题单号的情况,其中问题单号是由ap命令加入的。

/*BEGIN: Added by lushengwen, 2002/5/13 问题单号:D02556*/

2.没有问题单号的情况,

/*BEGIN: Added by lushengwen, 2002/5/13*/

4.2.2.4 ae 添加结束命令

该命令是as的对应命令,表示结束添加

支持块命令操作

4.2.2.5 abg 插入添加开始和结束说明

该命令是前两个命令的组合

支持块命令操作

4.2.2.6 db 删除开始命令

它能自动生成如下说明:

1.有问题单号的情况,其中问题单号是由ap命令加入的。

/*BEGIN: Deleted by lushengwen, 2002/5/13 问题单号:D02556*/

2.没有问题单号的情况,

/*BEGIN: Deleted by lushengwen, 2002/5/13 */

4.2.2.7 de 删除结束命令

该命令是ds的对应命令,表示删除结束

4.2.2.8 dbg 插入删除开始和结束说明

该命令是前两个命令的组合

支持块命令操作

4.2.2.9 mb 修改开始命令

它能自动生成如下说明:

1.有问题单号的情况,其中问题单号是由ap命令加入的。

/*BEGIN: Modified by lushengwen, 2002/5/13 问题单号:D02556*/

2.没有问题单号的情况,

/*BEGIN: Modified by lushengwen, 2002/5/13 */

4.2.2.10 me 修改结束命令

该命令是ms的对应命令,表示删除结束

4.2.2.11 mbg 插入修改开始和结束说明

该命令是前两个命令的组合

支持块命令操作

4.2.3 其余几个常用宏

4.2.3.1 将从C++的 // 注释改为标准的C /* */注释

ComentCPPtoC() 文件中的//注释自动修改为/* */注释,因为很多C编译器不能很好的处理C++风格的 // 注释,用该命令可以方便的将选中区域内的//注释进行修改,建议将该宏定义在菜单中。

4.2.3.2 能自动将Tab转换成空格(mstp_out.c)

ReplaceBufTab() 自动将当前文件中的Tab转换成空格

ReplaceTabInProj() 自动将工程中的文件中的Tab转换成空格

因为不同的编辑器对tab的长度定义不一至,造成代码格式紊乱,编程规范是不允许用tab键的,可以用该宏来将整个文件的tab进行替换,非常方便,建议将该宏定义在菜单中

4.2.3.3 插入当前的函数名

InsertFuncName() 能自动的插入本函数名,现在的函数名一般较长,特别是在调试打印代码中为了显示出出错的函数经常需要输入本函数名,该宏能带来极大方便。建议定义为一个热键 ctrl 1

4.2.3.4 自动在函数入口、出口插入、删除打印函数

注意使用本功能时一定要求所有的语句符合公司编程规范,要求一条语句一行,因为各种编码情况很复杂,特别是老代码和有大量条件编译的情况下很难覆盖各种情况,最好在执行完后再检查一遍。不推荐使用工程内的插入和删除。

InsertTraceInfo() 能够自动在函数的出、入口首尾加入打印代码,即在光标处加入一个进入函数的打印,在函数的返回处加入一个出函数的打印,用于调试跟踪时很方便,建议定义为热键 Ctrl t;

AutoInsertTraceInfoInBuf()能够在当前文件的函数出入口加入打印信息,建议定义菜单;

AutoInsertTraceInfoInPrj()能够在当前工程的函数出入口加入打印信息,建议定义为菜单;

RemoveTraceInfo() 删除InsertTraceInfo()添加的打印信息,建议定义为菜单;

RemoveCurBufTraceInfo()删除文件中全部的InsertTraceInfo()添加的打印信息,建议定义为菜单;

RemovePrjTraceInfo()删除但前工程中全部的InsertTraceInfo()添加的打印信息,建议定义为菜单;

4.2.3.5 自动格式当前行

FormatLine() 能够自动将一行长的文字分成多行,并且从第二行开始,起始列为(光标所在列-2),该宏是为了弥补因为对话框只能处理256个字符而编写的,当需要输入超过256个字符的说明时,就可以先把它拷贝到第一行,然后执行本宏,进行分行对齐。

4.2.3.6 更新函数列表

UpdateFunctionList() 能够自动在光标所在行重新生成函数列表,用于函数头说明的函数列表更新。

4.2.3.7 复合语句删除

DelCompoundStatement()能自动删除复合语句,定义热键 Ctrl D

对于如下语句,如果我想删除条件 ulCount > 0,只需将光标放在if语句这一行(蓝色行),执行 Ctrl D 即可

stSubsystemRec.hwRBSubSystemCpuAveUsageLimit = CPU_RESTORE_THRESHOLD;

if( ulCount > 0 )

{

stSubsystemRec.hwRBSubSystemAdminStatus = ADSTATUS_DOWN;

stSubsystemRec.hwRBSubSystemCpuMaxUsageLimit = CPU_ALARM;

stSubsystemRec.hwRBSubSystemDSPAveUsageLimit = DSP_ALARM;

stSubsystemRec.hwRBSubSystemDSPMaxUsageLimit = DSP_RESTORE;

stSubsystemRec.hwRBSubSystemOperStatus = OPSTATUS_OTHER;

}

stSubsystemRec.hwRBSubSystemIndex = 0;

stSubsystemRec.hwRBSubSystemIpAddress = ulIpAddr;

执行结果

stSubsystemRec.hwRBSubSystemCpuAveUsageLimit = CPU_RESTORE_THRESHOLD;

stSubsystemRec.hwRBSubSystemAdminStatus = ADSTATUS_DOWN;

stSubsystemRec.hwRBSubSystemCpuMaxUsageLimit = CPU_ALARM;

stSubsystemRec.hwRBSubSystemDSPAveUsageLimit = DSP_ALARM;

stSubsystemRec.hwRBSubSystemDSPMaxUsageLimit = DSP_RESTORE;

stSubsystemRec.hwRBSubSystemOperStatus = OPSTATUS_OTHER;

stSubsystemRec.hwRBSubSystemIndex = 0;

stSubsystemRec.hwRBSubSystemIpAddress = ulIpAddr;

5 附录

5.1 SI默认快捷键汇总

退出程序 : Alt+F4

重画屏幕 : Ctrl+Alt+Space

完成语法 : Ctrl+E

复制一行 : Ctrl+K

恰好复制该位置右边的该行的字符 : Ctrl+Shift+K

复制到剪贴板 : Ctrl+Del

剪切一行 : Ctrl+U

剪切该位置右边的该行的字符              : Ctrl+;

剪切到剪贴板 : Ctrl+Shift+X

剪切一个字 : Ctrl+,

左边缩进 : F9

右边缩进 : F10

插入一行 : Ctrl+I

插入新行 : Ctrl+Enter

加入一行 : Ctrl+J

从剪切板粘贴 : Ctrl+Ins

粘贴一行 : Ctrl+P

重复上一个动作 : Ctrl+Y

重新编号 : Ctrl+R

重复输入 : Ctrl+/

替换 : Ctrl+H

智能重命名 : Ctrl+'

关闭文件 : Ctrl+W

关闭所有文件 : Ctrl+Shift+W

新建 : Ctrl+N

转到下一个文件 : Ctrl+Shift+N

打开 : Ctrl+O

重新装载文件 : Ctrl+Shift+O

另存为 : Ctrl+Shift+S

显示文件状态 : Shift+F10

激活语法窗口 : Alt+L

回到该行的开始 : Home

回到选择的开始 : Ctrl+Alt+[

到块的下面 : Ctrl+Shift+]

到块的上面 : Ctrl+Shift+[

书签 : CTRL+M

到文件底部 : Ctrl+End、Ctrl+(KeyPad) End

到窗口底部 : (KeyPad) End (小键盘的END)

到一行的尾部 : End

到选择部分的尾部 : Ctrl+Alt+]

到下一个函数 : 小键盘 +

上一个函数 : 小键盘 -

后退 : Alt+,, Thumb 1 Click

后退到索引 : Alt+M

向前 : Alt+., Thumb 2 Click

转到行 : F5, Ctrl+G

转到下一个修改 : Alt+(KeyPad) +

转到下一个链接 : Shift+F9, Ctrl+Shift+L

回到前一个修改 : Alt+(KeyPad) -

跳到连接(就是语法串口列表的地方) : Ctrl+L

跳到匹配 : Alt+]

下一页 : PgDn, (KeyPad) PgDn

上一页 : PgUp, (KeyPad) PgUp

向上滚动半屏 : Ctrl+PgDn, Ctrl+(KeyPad) PgDn, (KeyPad) *

向下滚动半屏 : Ctrl+PgUp, Ctrl+(KeyPad) PgUp, (KeyPad) /

左滚 : Alt+Left

向上滚动一行 : Alt+Down

向下滚动一行 : Alt+Up

右滚 : Alt+Right

选择一块 : Ctrl+-

选择当前位置的左边一个字符 : Shift+Left

选择当前位置右边一个字符 : Shift+Right

选择一行 : Shift+F6

从当前行其开始向下选择 : Shift+Down

从当前行其开始向上选择 : Shift+Up

选择上页 : Shift+PgDn, Shift+(KeyPad) PgDn

选择下页 : Shift+PgUp, Shift+(KeyPad) PgUp

选择句子(直到遇到一个 . 为止) : Shift+F7, Ctrl+.

从当前位置选择到文件结束 : Ctrl+Shift+End

从当前位置选择到行结束 : Shift+End

从当前位置选择到行的开始 : Shift+Home

从当前位置选择到文件顶部 : Ctrl+Shift+Home

选择一个单词 : Shift+F5

选择左边单词 : Ctrl+Shift+Left

选择右边单词 : Ctrl+Shift+Right

到文件顶部 : Ctrl+Home, Ctrl+(KeyPad) Home

到窗口顶部 : (KeyPad) Home

到单词左边(也就是到一个单词的开始) : Ctrl+Left

到单词右边(到该单词的结束)              : Ctrl+Right

排列语法窗口(有三种排列方式分别按1,2,3次) : Alt+F7

移除文件 : Alt+Shift+R

同步文件 : Alt+Shift+S

增量搜索(当用Ctrl + F 搜索,然后按F12就会转到下一个匹配) : F12

替换文本 : Ctrl+Shift+H

向后搜索 : F3

在多个文件中搜索 : Ctrl+Shift+F

向前搜索 : F4

搜索选择的(比如选择了一个单词,shift+F4将搜索下一个) : Shift+F4

搜索 : Ctrl+F

浏览本地语法(弹出该文件语法列表窗口,如果你光标放到一个变量/函数等,那么列出本文件该变量/函数等的信息)       : F8

浏览工程语法 : F7, Alt+G

跳到基本类型(即跳到原型)                : Alt+0

跳到定义出(也就是声明)                  : Ctrl+=, Ctrl+L Click (select), Ctrl+Double L Click

检查引用 : Ctrl+/

语法信息(弹出该语法的信息)              : Alt+/, Ctrl+R Click (select)

高亮当前单词 : Shift+F8

语法窗口(隐藏/显示语法窗口)             : Alt+F8

关闭窗口 : Alt+F6, Ctrl+F4

最后一个窗口 : Ctrl+Tab, Ctrl+Shift+Tab

5.2 推荐格式

套用下参考文献1中的说法:人各有志!个人兴趣不同,推荐大家可以在 2.1 节基础上进行修改。

6 参考文献

1. Source Insight 的实用技巧: http://blog.****.net/Jupin/archive/2007/10/19/1832536.aspx

2. SI的帮助文件

3. 谷俊奇:quicker.doc、Quicker.em

上一篇:五分钟用Docker快速搭建Go开发环境


下一篇:[转]Windows网络编程学习-面向连接的编程方式