利用sourceinsight宏(Quicker.em)提升编码效率和质量

利用sourceinsight宏(Quicker.em)提升编码效率和质量
Marco是sourceinsight软件一个强大的功能,用户能够经过编写宏来实现自定义功能。这里有个比较流行的宏文件quicker.em,原做者貌似是原Huawei公司的员工编写整理的,基本功能比较全,能够知足通常的需求,我的也能够根据这个为基础进行更个性化的改写。c++

经过以下配置:
1.运行SI,打开Base工程,将Quicker.em加入到工程中;
2.安装触发热键和菜单,打开SI的Options的Key Assignments菜单,在Command窗口中选择Macro: AutoExpand而后对其赋一个热键,例如Ctrl Enter。
附下quicker.em的功能说明:
1 标准C语言扩展
1.1 /* 自动生成/* */
该命令自动生成C语言的注释,它能自动换行对齐,在把文档中一长串注释拷贝 过来时特别管用,不用本身去对齐了。还能自动识别中文和英文单词,对于中文不会把一个字分开,对于英文单词分开时会自动添加连字符,下面是一个注释的例子 abcdefghijk = abcd + cdefg + hijk /*该命令自动生成C语言的注释,它能自 动 换行对齐,在把文档中一长串注释拷 贝 过来时特别管用,不用本身去对齐了。*/ 
1.2 { 自动生成 } 
1.3 while (wh) 自动生成While语句
while ( # )
{
#
}

1.4 if 自动生成if语句
if 生成if结构的语句
ife 对应生成if else结构的语句
ifs 对应生成if elseif else结构的f语句
if ( # )
{
#

1.5 for 自动生成for语句,支持块命令插入
该命令自动生成以下格式
for ( #; #; # )
{
#
}
1.5.1 fo 自动生成for语句与前一条命令相比它直接会定义循环变量
UINT32 ulI = 0;

for ( ulI = 0; ulI < #; ulI++ )
{
#
}

1.6 do 自动生成 do while语句
该命令自动生成以下格式
do
{
#
} while ( # ); 
1.7 #ifd 自动生成 #ifdef 命令
该命令生成以下格式 
#ifdef UMSC
#endif /* UMSC */ 
1.8 #ifn 自动生成 #ifndef 命令
该命令生成以下格式
#ifndef UMSC
#endif /* UMSC */ 
1.9 #if 自动生成 #if 命令
该命令生成以下格式
#if ( UMSC == 1)
#endif /*if ( UMSC == 1) */ 
1.10 cpp 自动生成适用于c++的c原型说明定义
该命令生成以下格式
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */


#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */

1.11 switch (sw) 自动生成switch语句
该命令将提示输入case的个数,生成以下格式
switch ( # )
{
case #:
#
break;
default:
#
}

1.12 case (ca)自动生成case语句
支持块命令输入
该命令生成以下格式,用它能够避免遗漏break
case #:
#
break; 

1.13 struct (st) 自动生成结构类型
该命令自动生成以下结构定义,它提示输入结构名,会自动转换成大写形式,而且自动在其后添加_STRU做为结构类型
typedef struct HELLO_TEST
{

}HELLO_TEST_STRU;

1.14 enum (en) 自动生成枚举类型
该命令自动生成以下结构定义,它提示输入结构名,会自动转换成大写形式,而且自动在其后添加_STRU做为结构类型
typedef enum HELLO_TEST
{

}HELLO_TEST_ENUM;


2 标准说明生成
2.1 config (co) 配置用户名和标题的说明语种
用户名就是前面自动生成的做者,修改者的名字,语种

2.2 file (fi) 生成标准的文件头
自动生成以下格式,它能自动取得文件名,做者名,时间,以及函数列表

2.3 func (fu) 生成标准的函数头说明
其 自动生成以下函数头,该函数必须在该函数的前一行执行,它能自动取得函数名,可以自动取得函数的输入、输出参数,而且排列好,同时生成日期和做者。可以 提示输入功能描述,输入的内容可以自动换行对齐,这样既能够避免遗漏说明,并且通常在详细设计中对每一个函数的主要功能都有详细的描述,只要把这些描述 拷贝过来便可,它能自动排列好, 很是方便。 (由于SI的宏功能有限,没能自动加入调用函数和被调函数的功能)
若是不是在已存在的函数前执行则提示输入函数名,提示输入函数描述,提示输入返回值类型,提示输入函数入口参数,输完后按Esc退出 

2.4 hi 增长修改历史列表
自动在该行增长修改历史列表,用于文件头和函数头说明中的历史记录更新,其添加形式以下 

2.5 hd 自动生成函数头文件
该命令可以自动生成但前C文件的头文件定义,包括经常使用的宏定义,还有所有的函数原型定义。 

2.6 Hdn 生成新的有文件
该命令可以自动生成指定的的头文件定义,包括经常使用的宏定义,提示输入函数原型的类型。

3 代码修改注释
3.1 pn 添加问题单号
在进行问题单修改时都要求在修改的地方注明问题单号和修改人以及修改时间,大部分一个问题单的修改都会涉及到几个地方,本功能提供自动取问题单号的功能,下面的几个命令所生成的问题单号就是有它提供,若是输入为#则不显示问题单号
3.2 ap 添加问题单修改说明
该命令提示输入问题单号和修改缘由,生成以下格式的说明

3.3 ab 添加开始说明
它能自动生成以下说明:
1.有问题单号的状况,其中问题单号是由ap命令加入的。
/*BEGIN: Added by lushengwen, 2002/5/13 问题单号:D02556*/
2.没有问题单号的状况,
/*BEGIN: Added by lushengwen, 2002/5/13*/

3.4 ae 添加结束命令
该命令是as的对应命令,表示结束添加
支持块命令操做

3.5 abg 插入添加开始和结束说明
该命令是前两个命令的组合
支持块命令操做

3.6 db 删除开始命令
它能自动生成以下说明:
1.有问题单号的状况,其中问题单号是由ap命令加入的。
/*BEGIN: Deleted by lushengwen, 2002/5/13 问题单号:D02556*/
2.没有问题单号的状况,
/*BEGIN: Deleted by lushengwen, 2002/5/13 */

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

3.8 dbg 插入删除开始和结束说明
该命令是前两个命令的组合
支持块命令操做

3.9 mb 修改开始命令
它能自动生成以下说明:
1.有问题单号的状况,其中问题单号是由ap命令加入的。
/*BEGIN: Modified by lushengwen, 2002/5/13 问题单号:D02556*/
2.没有问题单号的状况,
/*BEGIN: Modified by lushengwen, 2002/5/13 */

3.10 me 修改结束命令
该命令是ms的对应命令,表示删除结束

3.11 mbg 插入修改开始和结束说明
该命令是前两个命令的组合
支持块命令操做编程

 

4      其他几个经常使用宏编辑器

4.1     将从C++的 // 注释改成标准的C /* */注释函数

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

4.2     能自动将Tab转换成空格(mstp_out.c)编码

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

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

由于不一样的编辑器对tab的长度定义不一至,形成代码格式紊乱,编程规范是不容许用tab键的,能够用该宏来将整个文件的tab进行替换,很是方便,建议将该宏定义在菜单中调试

4.3     插入当前的函数名orm

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

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

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

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

AutoInsertTraceInfoInBuf()可以在当前文件的函数出入口加入打印信息,定义菜单

AutoInsertTraceInfoInPrj()可以在当前工程的函数出入口加入打印信息,定义为菜单

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

RemoveCurBufTraceInfo()删除文件中所有的InsertTraceInfo()添加的打印信息,定义为菜单

RemovePrjTraceInfo()删除但前工程中所有的InsertTraceInfo()添加的打印信息,定义为菜单

4.5     自动格式当前行

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

4.6     更新函数列表

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

 

4.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;

4.8      注释掉多行

      AddComment 可以将多行代码注释掉

      DelComment 能够解除AddComment的注释

   

4.9     其它跟扩展命令对应的宏

下面宏能够根据须要定义为热键

ClearPrombleNo    清除问题单   Alt Del

ExpandBraceLarge  加入{}  /*支持块输入*/  Ctrl ]

 ExpandBraceLittle   加入() /*支持块输入*/  Ctrl  Shift  9

ExpandBraceMid     加入[] /*支持块输入*/  Alt [

FileHeaderCreate    生成文件头说明           Ctrl Shift i

 FunctionHeaderCreate  生成函数头说明     Ctrl Shift u

 HeaderFileCreate     生成头文件                  Ctrl  Shift d

 InsertCase                 插入case语句  Ctrl Alt c

InsertDo                      插入do语句  /*支持块输入*/  Ctrl Alt d

InsertElse                  插入else语句  /*支持块输入*/  Ctrl Alt e

InsertFor                   插入for语句  /*支持块输入*/  Ctrl Alt  f

InsertIf                       插入if语句  /*支持块输入*/      Ctrl Alt I

InsertSwitch              插入switch语句                           Ctrl Alt s

InsertWhile               插入while语句  /*支持块输入*/   Ctrl Alt w

InsIfdef                     插入#ifdef语句   /*支持块输入*/      Ctrl  3

PredefIfStr                  插入#if语句    /*支持块输入*/         Alt  3

InsertReviseAdd        插入添加说明   /*支持块输入*/         Ctrl  Shift  a

InsertReviseDel         插入删除说明  /*支持块输入*/         Ctrl  Shift  r

InsertReviseMod       插入修改说明  /*支持块输入*/         Ctrl  Shift  m

相关文章
相关标签/搜索