Source Insight & Source Navigator使用技巧
一、Source Insight實用技巧:
Source Insight(下文的SI指的也是它)就是這樣的一個東西:
Windows下開發人員的至愛,功能強大,界面友好。支援文法高亮、符号跳轉,還支援函數調用關系圖顯示。這是一個專業的程式設計環境,很多大公司都是使用它的。這個編輯器除支援完善的自定義功能外,幾乎所有配置都能作個性化配置。除此之外,它本身帶有一套功能強大的宏語言(Macro Language),借助這種語言可以很友善的程式設計實作各種特殊功能,非一般編輯器所能比拟。查找功能支援得也很不錯。雖然在工程較大時,查找起來有點慢。但是它除了一般編輯器所支援的普通字元串查找、正規表達式查找外,還能支援關鍵字查找-這種方式比前兩者快得多,也算是一個彌補。不足之處是列模式較弱,對中文支援有缺陷。
顯然,它也像其它任何東西一樣的,同時具有優點和缺點的本性的,究竟如何,且聽我一一道來。
官網下載下傳:http://www.sourceinsight.com/down35.html
序列号(Serial):(任選其一)
SI3US-279028-11281
SI3US-772862-51931
SI3US-465643-84290
SI3US-176526-66007
SI3US-060062-28251
1 開胃菜-初級應用
1.1 選擇美麗的界面享受工作
雖然不能以貌取人,但似乎從來沒有人責備以貌取軟體的。SI的華麗界面,絕對符合現代花花世界的人的審美趣味。在SI中,我們可以輕松地把各種類型關鍵字、變量、标志符、函數、宏、注釋等定義為不同的顔色和顯示方式(正體或斜體、加粗或正常、加下劃線、放大顯示等),總有一種方式能讓我們一眼就能分辨出這個辨別是什麼。1.1.1 字型選擇
在SI中樣式是可以被繼承,如果要從根本上改變字型,最簡單的方式就是直接修改根樣式中的字型,因為其它樣式都會由此繼承而來。選擇Options/Document Options頁面内的Font Options中的Screen Fonts字型,即可改變根樣式中的字型。SI中的預設配置為Verdana字型,是一種非等寬字型 2 ,為了使編寫的代碼在各種編輯器中看起來都有良好的對齊效果,這裡強烈建議使用等寬字型,Courier、New Courier和宋體等都是較好的選擇。1.1.2 顔色定義
畢竟這是見仁見智的東西,是以從來沒有統一的标準 3 。很多人并不喜歡SI提供的預設配置,那麼我們就改吧。選擇Options/Style Properties頁面,就可以在其中修改所有樣式了。選擇等号(=)表示繼承Parent Style,也可以選擇Pick(或者ON/OFF等)去配置一個新值。這完全視乎個人喜好。1.1.3 辨別符樣式選擇
在與 顔色定義 一節同樣的界面内即可完成此項配置。1.1.4 背景色選擇
在希望要改變背景色的視窗點選滑鼠右鍵(假定使用的是右手滑鼠 4 ),選擇上下文菜單的 xxx Window Properties項,然後點選彈出視窗的Back Color按鈕,即可修改該視窗背景色。對于SI的源碼主視窗,隻需選擇上下文菜單的Special Window Color項即可完成背景色修改。1.2 配置合理的預設值高效工作
1.2.1 使用合理的縮進
我始終認為最容易獲得認同的是關于這個選項的配置了。選擇Options/Document Options頁面,點選其内的Auto Indent按鈕,在彈出的Auto Indenting視窗中,預設配置為 Auto Indent Type選擇Smart,且勾選了Smart Indent Options中的兩個可選項,這樣得到的預設縮進效果為每次都要手工去調整其縮進,其實隻要把兩個勾選項去掉,就可以得到while (1) { I }
何樂而不為呢?while (1) { I }
1.2.2 顯示坐标
通常情況下在視窗狀态欄左下方,最會顯示目前光标所在行列資訊,但我總覺得不夠明顯,于是通常我們作如下配置: 選擇Options/Document Options頁面,勾選其中的Show line numbers。同時勾選其中的Show right margin,我們就可顯示一條右邊界,随時提醒我們是否該行代碼寫得過長了。1.3 建立便捷的快捷鍵快樂工作
1.3.1 幾個較常用的快捷鍵
預設情況下,SI已經定義了很多非常實用的快捷鍵:
F5
指定行号,實作行跳轉,在遇到編譯錯誤的時候,能特别友善的找到出錯行。
Shift+F8
高亮顯示指定辨別,快速浏覽辨別的使用情況。
Ctrl+滑鼠點選辨別
直接跳轉至辨別定義處。
Ctrl+F
本檔案内查找。
F3
本檔案查找結果的上一個。
F4
本檔案查找結果的下一個。
F7
打開Browse Project Symbols視窗,快速浏覽工程内辨別定義。
Ctrl+M
建立或查找書簽,友善下次找回此位置。
1.3.2 自定義快捷健
選擇Options/Key Assignments,在彈出的Key Assignments視窗中可自由添加自己喜歡的快捷鍵。比較值得推薦的有如下幾個快捷鍵定義:
Edit: Drag Line Down
光标目前行下移。
Edit: Drag Line Up
光标目前行下移。
Edit: Join Lines
目前行和下一行連接配接成一行。
1.3.3 更多的快捷鍵
如果你正好對SI的Marco語言(下文将會介紹)有研究,那麼還可以定義更多有用的快捷鍵,比如添加檔案頭、函數頭、注釋等(下文在介紹Marco語言時會介紹如何實作)。2 小技巧-中級應用
2.1 查找與替換
在SI中支援多種查找及替換方式,除了上文提到的檔案内查找外,還支援工程範圍内查找、目錄查找、指定多檔案查找等等。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預先建立的資料庫,查找起來速度相當快。但通常這種速度隻對在查找辨別符時有明顯效果。對于像函數名,變量名等的查找,強烈建議使用這兩種方式進行查找。
Search Files
選擇Search/Search Files或按Ctrl+Shift+F組合鍵,在彈出的Search Files視窗進行查找操作。 在File Name框中可以填入檔案名或檔案夾。注意當要查詢的檔案夾雙包含子檔案夾時,可以勾選Options中的Include Subdirectiories,實作對各層檔案的遞歸搜尋。
Search Project
選擇Search/Search Project,在彈出的Search Project視窗進行查找操作。操作與Loopup References幾乎完全一緻,它們各自儲存上次搜尋的配置。
2.1.2 替換
單檔案替換
選擇Search/Replace或按Ctrl+H組合鍵,在彈出的Replace視窗進行查找操作。在Search項目裡勾選Selection則僅對目前選中的文檔部分進行替換。另外如果勾選了Confirm Replacements則是逐個确認替換,否則會同時替換所有符合替換條件内容。
多檔案替換
選擇Search/Replace Files或按Ctrl+Shift+H組合鍵,在彈出的Replace Files 視窗進行查找操作。除了增加New框(替換後的内容)外,其餘均與Search Files視窗相同,可參照查找部分的說明進行操作。
2.2 列操作
雖然開篇時就說過,SI的列操作功能比較弱,但不等于沒有。先按下Alt鍵,接着就可用滑鼠進行列選擇,然後就可以删除指定的列。2.3 無名技巧
這裡介紹一些小技巧,大多數情況下我們可以無視它們的存在。但如果我們知道這些,某些時候,會有效提高工作效率。
Smart Rename
在上下檔案菜單中選Smart Rename或按Ctrl+'組合鍵,即可彈出Smart Rename視窗。它有很強大的功能,但最便捷的使用方式是更改函數内局部變量的名字,操作隻作用于函數内部,速度非常快。
Renumber
使用Ctrl+R将彈出Renumber視窗,這個用于處理數字順序排列的情況相當有效,比如數組下标。例如現有代碼
現在要改為array[0] = 1; array[1] = 2; array[2] = 3;
當然可以一個個修改,但最快的方式是在array[0] = 1;之前添加array[0] = 0;,然後列選數組下标,使用Renumber功能以 0為起始值重填數值。array[0] = 0; array[1] = 1; array[2] = 2; array[3] = 3;
Edit Condition
很多代碼尤其是驅動代碼,當中有大量的預編譯定義,以實作對不同硬體配置的支援。在閱讀這樣的代碼時最痛苦的是不能簡單判斷程式實際執行的代碼分枝。大量分枝同時存在,常常會混淆我們的視聽。比如對于下面的代碼:
如果确定我們目前分析的是DEV1的執行情況 5,那麼可以選擇上下檔案菜單的Edit Condition 選項,在彈出的Conditional Parsing視窗中把DEV1的值設定為True,那麼 #ifdef DEV1就等價于#if 1了,相當注釋掉了#else分枝的代碼。反之,設定為Flase時,則注釋掉#ifdef DEV1分枝的代碼。#ifdef DEV1 /* DEV1代碼代碼 */ #else /* 其它裝置執行代碼 */ #endif
3 學會偷懶-進階應用
4 附錄1-SI中正規表達式
由于在查找及替換中,經常會使用用正規表達式 6 ,這裡對SI的正規表達式進行簡單介紹。4.1 通配符
正規表達式通配符總表:
Character Matches ^ (在表達式開始處) 行的開始部分 . 任意單個字元 [abc] 任意屬于集合 abc 的單個字元 [^abc] 任意不屬于集合 abc 的單個字元 * 前面字元的0個或多個重複 + 前面字元的1個或多個重複 \t 一個 tab 字元 \s 一個空格符 \w 一個空白符(包括 tab 符和空格符) $ 行的結束部分 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。 舉個真實的使用例子,相信會增加大家的興趣。有時為友善調試,代碼中到處流浪着各種形式的mytrace調用有時希望把它們全部注釋掉,而有些時候又希望把它們全部恢複回來。這是個簡單的例子,可以使用mytrace("Create parameter list... ");
把它們恢複回來,而使用^\(.*\)\(/\*\)\(.*mytrace.*\)\(\*/\)___FCKpd___6nbsp;==> \1\3
則完成把它們全部注釋掉。^\(.*\)\(mytrace\)\(.*\)___FCKpd___7nbsp;==> \1/*\2\3*/
5 附錄2-SI中的宏語言
我始終認為這是SI中最有趣的部分,這是一種功能強大的程式設計語言,幾乎可以實作在程式設計過程可能使用到的各種功能。 這裡不準備對如何實用宏語言進行程式設計作介紹(可參閱SI幫助文檔。),隻介紹如何使用已編好程式。為友善使用,我已把這些程式都集中放在utils.em檔案中,下文就此檔案進行論述。 該宏檔案實作了一些在編碼過程中可能會用到的功能, 如添加檔案頭、函數說明(使用時能自動添加檔案名、函數名和目前日期)和宏定義,代碼補全等。 使用說明:推薦使用的宏:InsFileHeader、InsFunHeader、InsHeaderDef、InsIfdef和AutoExpand (為代碼自動補全功能,建議建快捷鍵)。 關于AutoExpand的舉例說明, 當你輸入了 switch 且光标正處于switch後面,運作該宏則會得到
Project/Open Project...
打開Base工程(該工程一般在"我的檔案/Source Insight/Projects/Base"中);
Project/Add and Remove Project Files...
加入宏檔案(即utils.em);
Options/Menu Assignments
打開Menu Assignments視窗,在Command中輸入Macro,選中要使用的宏,添加到合适的菜單中.
對于InsFunHeader宏,如果有如下函數體switch (###) { case break; default: }
光标在函數體内時運作該宏,那麼将會在函數體上方得到int nOpenConfigFile(char *pchMemConfig, char *pchFlashConfig, int nSize, int nMode) { I }
其中的函數名及編寫日期自動按實際情況填充,T357串可通過修改utils.em檔案,改成你需要的名字。/****************************************************************************** * nOpenConfigFile - * DESCRIPTION:- * * Input: N/A * Output: N/A * Returns: N/A * * modification history * -------------------- * 1.00, Apr 19, 2007, T357 written. * -------------------- ******************************************************************************/
6 附錄3-推薦格式
所謂人各有志,這裡就不說啦。7 結束
至此,已将我所知的所有關于Source Insight(未包括其附帶的Macro語言)知識在此文檔中描述出來。 如有錯漏,請指正。
源代碼檢視工具 Source Navigator 使用心得:
Source Navigator 是Red Hat出品的一款檢視源代碼的工具,非常好用,與Windows下的Source Insight有一敵。但是它的界面不怎麼好看,用的不是GTK圖形庫,是以界面風格與Gnome不一緻,操作上也有些不同。除了這些,其它功能都非常強大,細數如下。
裡面的一些簡寫約定如下:
Code Area cl Classes con Constants e Enums ec Enum Values fd Function Declarations fr friends fu Functions gv Global Variables iv Instance Variables ma Macros md Method Definitions mi Method Implementations t Typedefs un Unions lv Local variables ud Undefined Cross-Reference r Read w Written p Passed u Unused SNav的代碼視窗有6個标簽頁,它們分别是
“Edit”
“Hierarchy”
“Class”
“Xref”
“Retriever”
“Grep”
其中,“Edit”區是代碼顯示和修改的區域,是工作的主要區域;“Hierarchy”和“Class”是C++代碼的組織工具;“Xref”是最強大的一個工具,它會把一個函數中的所有用到的變量,調用的函數,用到的結構全記錄并展現出來;“Retriever”也是一個非常有用的工具,用于把一個庫代碼包中的所有定義的符号列出來,并記錄相應的屬性;“Grep”用于查找某一個符号,可指定搜尋的範圍,既可全局查找也可部分檔案查找。
閱讀代碼時常用到的一些鍵值組合:
Ctrl+leftarrow | rightarrow | uparrow | downarrow 以詞的形式移動光标
Ctrl+Alt+leftarrow | rightarrow | uparrow | downarrow 以詞的形式移動光标并選擇走過的區域
Ctrl+Shift+D 檢視標明符号的聲明
Ctrl+Shift+I 檢視標明符号的定義
代碼視窗的工具欄上有7個元素,分别是
“回退跳轉”
“前進跳轉”
“光标處所在的函數名或結構名”
“標明并要操作(比如查找)的字元串”
“在本檔案中查找標明的字元串”(比Ctrl+F查找功能好使)
“在整個工程中查找與標明字元串比對的代碼”
“在整個工程中以Grep的方式查找與標明字元串比對的代碼”(會跳到Grep标簽頁中顯示結果)