Source Insight设置

1、背景色选择
要改变背景色Options->preference->windows background->color设置背景色
2、解决字符等宽对齐问题。
SIS默认字体是VERDANA,很漂亮。这网页上应该也是用的VERDANA字体。但由于美观的缘故,VERDANA字体是不等宽的。比如下面两行
llllllllll
MMMMMMMMMM
同样10个字符,长度差多了.用VERDANA来看程序,有些本应该对齐的就歪了。解放方法是使用等宽的字体,但肯定比较丑。比较推荐的是用
Courier New。
3、解决TAB键缩进问题
Options-> Document Options里面的右下角Editing Options栏里,把Expand tabs勾起来,然后确定。OK,现在TAB键的缩进和四个空格的缩进在SIS里面看起来就对齐咯

4、SI中的自动对齐设置:
在C程序里, 如果遇到行末没有分号的语句,如IF, WHILE, SWITCH等, 写到该行末按回车,则新行自动相对上一行缩进两列。
Option->Document option下的Auto Indient中Auto Indient Type有三种类型 None,Simple,Smart。个人推荐选用Simple类型。
5、向项目中添加文件时,只添加特定类型的文件(文件类型过滤器)
编辑汇编代码时,在SIS里建立PROJECT并ADD TREE的时候,根据默认设置并不会把该TREE里面所有汇编文件都包含进来
只加了.inc和.asm后缀的,.s后缀的没有。而且用SIS打开.s的文件,一片黑白没有色彩,感觉回到DOS的EDIT时代了……
解决方法是在Options->Document Options里面,点左上的Document Type下拉菜单,选择x86 Asm Source File,
然后在右边的File filter里*.asm;*.inc;的后面加上*.s;接着CLOSE就可以了。
上面问题解决了,但注意加入*.s后还需要重新ADD TREE一遍才能把这些汇编加到PROJECT里面。
6、添加文件类型
用户可以定义自己的类型,Options->Document Options->add type,定义文件类型名以及文件名后缀。
勾选include when adding to projects在添加目录下文件到工程是该类文件就会添加进SI的工程。
如果需要将所有文件添加进SI的工程,可以定义一种文件类型*.*。
7、恢复ctrl+a的全选功能

通过关键词save 找到save all,更改为ctrl+shift+a,通过关键词select找到select all,更改为ctrl +a


Source Insight中的文件过滤器

遇到在新建工程的时候,需要加入一些除了.c .h 等之外的文件,比如.s,.scf ,Makefile和ReleaseNotes等文件,而每次新建工程的时候,即使取消了shown only known document types,和在点击Add All之后选择了Recusively add lower sub-directories ,也还是不能正常识别这类文件,也就不能加入进工程,只能我们自己手动双击添加到工程中,如果文件少还无所谓,但是包含了很多子文件夹的大工程,这样实在不可行。

百度了下,终于发现解决办法了:

打开Source Insight,在新建工程之前,进入

Options -> Document Options... Alt-T -> 点击Document Type的下拉框,然后选择Make File,在右边的File Filter中,在原先的*.mak后面加上一个分号,即多个不同过滤规则以分号间隔开,再加上*makefile,变成 *.mak;*makefile,并且选中Include when adding to projects,这样,以后再新建工程的时候,就可以识别makefile或Makefile了(好像此处SourceInsight并不区分大小写)。

类似的原理,给其他你想要加入的不同的类型的文件,分别加入到原先的一些文件类型后面,注意要用分号隔开,或者直接新建一个文件类型,然后写上对应的顾虑规则,比如

点击 Add Type,填入新文件类型的名字Scatter File,File Filter中写上*.scf,注意再选中下面的Include when adding to projects,这样就建立了一个新的文件类型, 以后新建工程加入文件时候,系统就能够识别后缀是scf的文件了。

当然感兴趣的,还可以对你新建立的文件类型进行一些格式化设置。包括Parsing,Tab等等设置。
1 sourceinsight screen font 的默认字体是Verdana的,它是一直变宽字体。在Document style中可以将字体改为定宽的Courier

2 勾掉indent Open Brace和Indent Close Brace的效果: 继上一段,在相对缩进行里, 如果输入"{"或"}", 则自动和上一行列对齐

3 今天把一个用sourceinsight排版整齐的C文件,偶然用VC打开一看,全乱了。研究了半天,发现SI对每个字符的宽度不太一致。
发现选上"view --> draft view", 就可以让每个字符的宽度一致了。快捷键是 "Alt + F12"
4选中几行代码按tab键或者shift+tab可以左右移动代码,调整代码时很有用。

配置成简单好用的c/java代码编辑器
1、缩进与tab

(1)Options菜单àPreferencesàTyping卡,勾掉下面两项∶

Typing tab indents line,regardless of selection,空行按tab无法前进

Typing tab replaces current selection,选定部分内容、再按tab时会清除所选

(2)Options菜单àDocument Options(针对不同文件类型,分别进行设置)à下拉左上文件类型框、选择合适类型(c源文件)àEditing Options框中,tab width=2à Editing Options框中,勾选Expand tabs(这样,按tab键、等价于输入2个空格)

(3)Options菜单àDocument Optionsà选择合适的文件类型à点击右边中间的Auto Indent钮à在弹出的框中,左边一定要点Smart,右边有两个复选框Indent Open Brace和Indent Close Brace,具体效果可以看SIS的HELP。按照部门里的编程风格要求,最方便的就是把两个复选框都取消掉,然后点OK。

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

勾掉Indent Open Brace和Indent Close Brace的效果∶继上一段,在相对缩进行里, 如果输入"}", 则自动和上一行列对齐(好像勾不勾都会有这个功能);而输入"{"时,不会与下面的行对齐(这是勾上Indent Open Brace时的效果)。
2、向项目中添加文件时,只添加特定类型的文件(文件类型过滤器)

有个同事比较生猛,得整汇编代码,但在SIS里建立PROJECT并ADD TREE的时候,根据默认设置并不会把该TREE里面所有汇编文件都包含进来,只加了.inc和.asm后缀的,.s后缀的没有。而且用SIS打开.s的文件,一片黑白没有色彩,感觉回到DOS的EDIT时代了…… 解决方法是在Options->Document Options里面,点左上的Document Type下拉菜单,选择x86 Asm Source File,然后在右边的File filter里*.asm;*.inc;的后面加上*.s;接着CLOSE就可以了。上面两个问题解决了,但注意加入*.s后还需要重新ADD TREE一遍才能把这些汇编加到PROJECT里面。
3、去掉功能强大但是无用的自动完成功能

Options菜单àPreferences àTyping卡àAuto Completion框,勾掉Use automatic symbol completion window(这里是SIS的全局设置)

Options菜单àDocument OptionsàEditing Options框中,勾掉Allow auto-complete(局部设置)

上面两项必须全部勾选,才能启用Auto Completion功能
4、恢复小键盘的“+,-,*,/”功能

Options菜单àKey assignments,通过关键词Scroll 找到Scroll Half Page Up,取消小键盘/;通过关键词Scroll 找到Scroll Half Page Down取消小键盘*;通过关键词Function找到Function Up,取消小键盘-,通过关键词Function找到Function down,取消小键盘+。
5、恢复ctrl+a的全选功能

通过关键词save 找到save all,更改为ctrl+shift+a,通过关键词select找到select all, 更改为ctrl +a
6、解决字符等宽对齐问题。

SIS默认字体是VERDANA,很漂亮。这网页上应该也是用的VERDANA字体。但由于美观的缘故,VERDANA字体是不等宽的。比如下面两行

llllllllll

MMMMMMMMMM

同样10个字符,长度差多了.用VERDANA来看程序,有些本应该对齐的就歪了。解放方法是使用等宽的字体,但肯定比较丑。可以用DOS字体,也就是记事本里的默认字体sysfixed 很丑,要有心理准备。比较推荐的是用Courier New。
SourceInsight提供的功能
1、解析日志信息时非常有用的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.1 创建SourceLink

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

可以打开日志信息,运行Parse Source Links命令,日志中能够匹配模式的每一行(通常是含有错误信息的行)、就会被设置上一个SourceLink
1.3在解析自定义命令输出时,使用SourceLink

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

2、替换(Replace) VS 上下文敏感的智能重命名(Context-Sensitive Smart Rename)
2.1 替换(Replace)

目前来说,普通的替换命令、快捷键为ctrl+H,足以已满足工作要求。

在弹出的替换窗口中,在Search框中勾选Selection来只在所选文本区域中替换(当然这时你要先选定区域然后再按ctrl+H)、勾选WholeFile来在整个当前文件内替换、两者都不勾选来从当前光标处替换至文件末尾;点右边的Files…按钮,可选择替换多个文件的内容。
2.2上下文敏感的智能重命名(Context-Sensitive Smart Rename)

Smart Rename命令、快捷键是Ctrl+’,是上下文敏感的全局搜索替换。它可以智能地重命名全部项目文件中的一个标示符。SourceInsight的搜索索引(search index)使得搜索过程进行地非常快。而且,使用Smart Rename所做的替换会被记录在Search Results窗口中,每一条替换记录旁有一个SourceLink链接到替换发生地文件。

Smart Rename可以用来重命名标记(symbol)。如果勾选了Smart Reference Matching选项,Smart Rename就只在正确的上下文范围内进行重命名。它可以智能地重命名全部项目文件中的一个标示符;它可以重命名函数本地变量,类或结构体成员、函数。

在弹出的Smart Rename窗口中有下面几项∶

Old Name 填旧名称。光标下的词会被自动加载;光标的位置非常重要,这是因为Source Insight会根据本地上下文背景、准确地确定你想要重命名哪一个标记。

推荐只填单个词、而不是字符串。

如果你在命名成员变量、或本地变量(),Old Name框中会显示完全标记名、即上层容器名+标记名。例如,框中的“DocDraw.paintStruc”代表DocDraw是函数名,paintStruc是函数的本地成员变量。

New Name 填新名称。只填标记名,不填上层容器名。

Output Search Results 如果勾选,搜索替换结果日志会被输出到Search Results窗口中。可以通过Windows菜单来切换,或ctrl+tab切换察看。并且每一条记录旁会有SourceLink链接到替换发生地文件。

Confirm Each Replacement 每次替换询问。

Skip Comments 不重名注释部分。

【使用心得列表】

(1)如何用Smart Rename重命名数组的数组名?如果只选取数组名,会报错!

(2)如果勾掉Smart Reference Matching,会搜索全部项目文件,并且Old Name框中不显示完全限定名;如果勾选Smart Reference Matching,无法重命名数组名,而且鼠标位置不正确时会报错。应该如何应对?
Source Insight 的实用技巧
2008-10-17 10:48

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中的两个可选项,这样得到的默认缩进效果为[pre] while (1)
{
I
}

[/pre]每次都要手工去调整其缩进,其实只要把两个勾选项去掉,就可以得到[pre] while (1)
{
I
}

[/pre]何乐而不为呢?
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 查找

[list=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 替换
[list=1]
单文件替换
选择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窗口,这个用于处理数字顺序排列的情况相当有效,比如数组下标。例如现有代码 [pre] array[0] = 1;
array[1] = 2;
array[2] = 3;

[/pre]现在要改为 [pre] array[0] = 0;
array[1] = 1;
array[2] = 2;
array[3] = 3;

[/pre]当然可以一个个修改,但最快的方式是在array[0] = 1;之前添加array[0] = 0;,然后列选数组下标,使用Renumber功能以 0为起始值重填数值。
Edit Condition
很多代码尤其是驱动代码,当中有大量的预编译定义,以实现对不同硬件配置的支持。在阅读这样的代码时最痛苦的是不能简单判断程序实际执行的代码分枝。大量分枝同时存在,常常会混淆我们的视听。比如对于下面的代码: [pre] #ifdef DEV1
/* DEV1代码代码 */
#else
/* 其它设备执行代码 */
#endif

[/pre]如果确定我们当前分析的是DEV1的执行情况 5,那么可以选择上下文件菜单的Edit Condition 选项,在弹出的Conditional Parsing窗口中把DEV1的值设置为True,那么 #ifdef DEV1就等价于#if 1了,相当注释掉了#else分枝的代码。反之,设置为Flase时,则注释掉#ifdef DEV1分枝的代码。
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来取出这个字符串。推而广之,可以使用\来取得组所包含的串。 例如:当设定把\(abc\)\(xyz\)替换为\2\1的替换规则时,对于 abcxyz 被替换串,则组1包含 abc,组2包含 xyz,而替换后的内容定义为组2内容后跟组1内容(\2\1),因此将得到 xyzabc。 举个真实的使用例子,相信会增加大家的兴趣。有时为方便调试,代码中到处流浪着各种形式的mytrace调用[pre] mytrace("Create parameter list... ");

[/pre]有时希望把它们全部注释掉,而有些时候又希望把它们全部恢复回来。这是个简单的例子,可以使用[pre] ^\(.*\)\(/\*\)\(.*mytrace.*\)\(\*/\)___FCKpd___6nbsp;==> \1\3

[/pre]把它们恢复回来,而使用[pre] ^\(.*\)\(mytrace\)\(.*\)___FCKpd___7nbsp;==> \1/*\2\3*/

[/pre]则完成把它们全部注释掉。
5 附录2-SI中的宏语言
我 始终认为这是SI中最有趣的部分,这是一种功能强大的编程语言,几乎可以实现在编程过程可能使用到的各种功能。 这里不准备对如何实用宏语言进行编程作介绍(可参阅SI帮助文档。),只介绍如何使用已编好程序。为方便使用,我已把这些程序都集中放在utils.em 文件中,下文就此文件进行论述。 该宏文件实现了一些在编码过程中可能会用到的功能, 如添加文件头、函数说明(使用时能自动添加文件名、函数名和当前日期)和宏定义,代码补全等。 使用说明:
[list=1]
Project/Open Project...
打开Base工程(该工程一般在"我的文档/Source Insight/Projects/Base"中);
Project/Add and Remove Project Files...
加入宏文件(即utils.em);
Options/Menu Assignments
打开Menu Assignments窗口,在Command中输入Macro,选中要使用的宏,添加到合适的菜单中. 推荐使用的宏:InsFileHeader、InsFunHeader、InsHeaderDef、InsIfdef和 AutoExpand (为代码自动补全功能,建议建快捷键)。 关于AutoExpand的举例说明, 当你输入了 switch 且光标正处于switch后面,运行该宏则会得到[pre] switch (###)
{
case
break;
default:
}

[/pre]对于InsFunHeader宏,如果有如下函数体[pre] int nOpenConfigFile(char *pchMemConfig, char *pchFlashConfig,
int nSize, int nMode)
{
I
}

[/pre]光标在函数体内时运行该宏,那么将会在函数体上方得到[pre]/******************************************************************************
* nOpenConfigFile -
* DESCRIPTION:-
*
* Input: N/A
* Output: N/A
* Returns: N/A
*
* modification history
* --------------------
* 1.00, Apr 19, 2007, T357 written.
* --------------------
******************************************************************************/

[/pre]其中的函数名及编写日期自动按实际情况填充,T357串可通过修改utils.em文件,改成你需要的名字。
6 附录3-推荐格式
所谓人各有志,这里就不说啦。
7 结束
至此,已将我所知的所有关于Source Insight(未包括其附带的Macro语言)知识在此文档中描述出来。

你可能感兴趣的:(Source,Insight)