Source Insight有許多實用的功能,特別是自己可以寫許多腳本,華爲的盧盛工作的腳本工具不錯,下面做些簡單介紹。
Quicker
1 標準C語言擴展
()中的命令是該命令的短命令,所有的命令都能用F4(向前搜索)、F3(向後搜索)來或Ctrl Enter(向後)定位,爲了方便最好能夠設置si的search菜單下的search窗口(Ctrl f)選中select when found。
1.1 /* 自動生成/* */
該命令自動生成C語言的註釋,它能自動換行對齊,在把文檔中一長串註釋拷貝過來時特別管用,不用自己去對齊了。還能自動識別中文和英文單詞,對於中文不會把一個字分開,對於英文單詞分開時會自動添加連字符,下面是一個註釋的例子
abcdefghijk= abcd + cdefg + hijk /*該命令自動生成C語言的註釋,它能自動
換行對齊,在把文檔中一長串註釋拷貝
過來時特別管用,不用自己去對齊了。*/
1.2 { 自動生成{ }
支持塊命令插入
該命令自動生成
{
}
1.3 while (wh) 自動生成While語句
該命令自動生成如下格式
支持塊命令插入
while ( # )
{
#
}
1.1 if 自動生成if語句
支持塊命令插入
if 生成if結構的語句
ife 對應生成if else結構的語句
ifs 對應生成if elseif else結構的f語句
該命令自動生成如下格式
if ( # )
{
#
}
1.1 for 自動生成for語句
支持塊命令插入
該命令自動生成如下格式
for ( #; #; # )
{
#
}
1.1 fo 自動生成for語句
與前一條命令相比它直接會定義循環變量
UINT32 ulI = 0;
for ( ulI = 0; ulI < #; ulI++ )
{
#
}
1.2 do 自動生成do while語句
支持塊命令插入
該命令自動生成如下格式
do
{
#
} while ( # );
1.1 #ifd 自動生成#ifdef 命令
支持塊命令插入
該命令生成如下格式
#ifdef UMSC
#endif /* UMSC */
UMSC爲提示輸入值
1.1 #ifn 自動生成#ifndef 命令
支持塊命令插入
該命令生成如下格式
#ifndef UMSC
#endif /* UMSC */
UMSC爲提示輸入值
1.1 #if 自動生成#if 命令
支持塊命令插入
該命令生成如下格式
#if ( UMSC == 1)
#endif /*if ( UMSC == 1) */
UMSC爲提示輸入值
1.1 cpp 自動生成適用於c++的c原型說明定義
該命令生成如下格式
#ifdef__cplusplus
#if__cplusplus
extern"C"{
#endif
#endif/* __cplusplus */
#ifdef__cplusplus
#if__cplusplus
}
#endif
#endif/* __cplusplus */
1.2 switch (sw) 自動生成switch語句
該命令將提示輸入case的個數,生成如下格式
switch (# )
{
case #:
#
break;
default:
#
}
注意該命令還有一個重要的功能,在執行該命令之前如果先剪接一個case用的定義組
然後執行該命令,提示輸入case個數時輸入0,它能自動生成全部定義
具體如下:
typedef enum SAAL_EXTERNAL_EVENT
{
AAL_ESTABLISH_INDICATION = 4,/*test*/
/*test*/
AAL_ESTABLISH_CONFIRM = 5,
/*test*/ AAL_RELEASE_REQUEST = 6,
AAL_RELEASE_INDICATION = 7, //test
// AAL_RELEASE_INDICATION = 20
AAL_RELEASE_CONFIRM = 8,
AAL_DATA_REQUEST = 9,
AAL_DATA_INDICATION = 10,
} SAAL_EXTERNAL_EVENT_ENUM ;
或者是如下的宏定義形式
#define AAL_ESTABLISH_INDICATION 4
/*test*/
#define AAL_ESTABLISH_CONFIRM 5
#define AAL_RELEASE_REQUEST 6
#define /*test*/ AAL_RELEASE_INDICATION 7
#define AAL_RELEASE_CONFIRM 8 //test
#define AAL_DATA_REQUEST 9 /*test*/
#define AAL_DATA_INDICATION 10
選中藍色部分,將其拷貝到剪貼板(Ctrl C),注意不要包含紅色部分,然後執行sw命令提示輸入case的個數這是填0,就會自動生成如下格式非常方便
switch( # )
{
case AAL_ESTABLISH_INDICATION:
#
break;
case AAL_ESTABLISH_CONFIRM:
#
break;
case AAL_RELEASE_REQUEST:
#
break;
case AAL_RELEASE_INDICATION:
#
break;
case AAL_RELEASE_CONFIRM:
#
break;
case AAL_DATA_REQUEST:
#
break;
case AAL_DATA_INDICATION:
#
break;
default:
#
}
1.3 case (ca)自動生成case語句
支持塊命令輸入
該命令生成如下格式,用它可以避免遺漏break
case #:
#
break;
1.4 struct (st) 自動生成結構類型
該命令自動生成如下結構定義,它提示輸入結構名,會自動轉換成大寫形式,並且自動在其後添加_STRU作爲結構類型
typedefstruct HELLO_TEST
{
#
}HELLO_TEST_STRU;
1.5 enum (en) 自動生成枚舉類型
該命令自動生成如下結構定義,它提示輸入結構名,會自動轉換成大寫形式,並且自動在其後添加_STRU作爲結構類型
typedefenum HELLO_TEST
{
#
}HELLO_TEST_ENUM;
2 標準說明生成
2.1 config (co) 配置用戶名和標題的說明語種
用戶名就是前面自動生成的作者,修改者的名字,語種,就是前面提到的文件頭說明和函數頭說明所採用的的語言有中文和英文兩種選擇
2.2 file (fi) 生成標準的文件頭
自動生成如下格式,它能自動取得文件名,作者名,時間,以及函數列表,而且在生成的過程中會主動彈出功能描述能的內容輸入對話框(提示對話框只能輸入256個字符),輸入的內容能夠自動換行對齊,這樣既可以避免遺漏說明,而且一般在詳細設計中對每個文件的主要功能都有詳細的描述,只要把這些描述拷貝過來即可,它能自動排列好,非常方便。
2.3 func (fu) 生成標準的函數頭說明
其自動生成如下函數頭,該函數必須在該函數的前一行執行,它能自動取得函數名,能夠自動取得函數的輸入、輸出參數,並且排列好,同時生成日期和作者。能夠提示輸入功能描述,輸入的內容能夠自動換行對齊,這樣既可以避免遺漏說明,而且一般在詳細設計中對每個函數的主要功能都有詳細的描述,只要把這些描述拷貝過來即可,它能自動排列好,非常方便。(因爲SI的宏功能有限,沒能自動加入調用函數和被調函數的功能)
如果不是在已存在的函數前執行則提示輸入函數名,提示輸入函數描述,提示輸入返回值類型,提示輸入函數入口參數,輸完後按Esc退出
/**************************************************************************函 數 名 : afdaain
功能描述 : 測試函數
輸入參數 : int d
int t
char t
輸出參數 : 無
返 回 值 : int
調用函數 :
被調函數 :
修改歷史 :
1. 日期 : 2002.5.11
作者 : lushengwen
修改方式 : 新生成函數
**************************************************************************/
2.4 hi 增加修改歷史列表
自動在該行增加修改歷史列表,用於文件頭和函數頭說明中的歷史記錄更新,其添加形式如下
2. 日 期 : 2002年5月17日
作 者 : lushengwen
修改內容 : lkasjdfkla
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 插入修改開始和結束說明
該命令是前兩個命令的組合
支持塊命令操作
1 其餘幾個常用宏
1.1 將從C++的// 註釋改爲標準的C /* */註釋
ComentCPPtoC() 文件中的//註釋自動修改爲/* */註釋,因爲很多C編譯器不能很好的處理C++風格的 // 註釋,用該命令可以方便的將選中區域內的//註釋進行修改,建議將該宏定義在菜單中。
1.2 能自動將Tab轉換成空格(mstp_out.c)
ReplaceBufTab() 自動將單前文件中的Tab轉換成空格
ReplaceTabInProj() 自動將工程中的文件中的Tab轉換成空格
因爲不同的編輯器對tab的長度定義不一至,造成代碼格式紊亂,編程規範是不允許用tab鍵的,可以用該宏來將整個文件的tab進行替換,非常方便,建議將該宏定義在菜單中
1.3 插入當前的函數名
InsertFuncName() 能自動的插入本函數名,現在的函數名一般較長,特別是在調試打印代碼中爲了顯示出出錯的函數經常需要輸入本函數名,該宏能帶來極大方便。建議定義爲一個熱鍵 ctrl 1
1.4 自動在函數入口、出口插入、刪除打印函數
注意使用本功能時一定要求所有的語句符合公司編程規範,要求一條語句一行,因爲各種編碼情況很複雜,特別是老代碼和有大量條件編譯的情況下很難覆蓋各種情況,最好在執行完後再檢查一遍。不推薦使用工程內的插入和刪除。
InsertTraceInfo() 能夠自動在函數的出、入口首尾加入打印代碼,即在光標處加入一個進入函數的打印,在函數的返回處加入一個出函數的打印,用於調試跟蹤時很方便,建議定義爲熱鍵 Ctrl t
AutoInsertTraceInfoInBuf()能夠在當前文件的函數出入口加入打印信息,定義菜單
AutoInsertTraceInfoInPrj()能夠在當前工程的函數出入口加入打印信息,定義爲菜單
RemoveTraceInfo()刪除InsertTraceInfo()添加的打印信息,定義爲菜單
RemoveCurBufTraceInfo()刪除文件中全部的InsertTraceInfo()添加的打印信息,定義爲菜單
RemovePrjTraceInfo()刪除但前工程中全部的InsertTraceInfo()添加的打印信息,定義爲菜單
1.5 自動格式當前行
FormatLine() 能夠自動將一行長的文字分成多行,並且從第二行開始,起始列爲關標所在列,該宏是爲了彌補因爲對話框只能處理256個字符而編寫的,當需要輸入超過256個字符的說明時,就可以先把它拷貝到第一行,然後執行本宏,進行分行對齊。
1.6 更新函數列表
UpdateFunctionList()能夠自動在光標所在行重新生成函數列表,用於函數頭說明的函數列表更新。
1.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;
1.8 其它跟擴展命令對應的宏
下面宏可以根據需要定義爲熱鍵
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