【工利其器】必会工具之(一)Source Insight篇
前言
转载请声明,转自【https://www.cnblogs.com/andy-songwei/p/9965714.html】,谢谢!
“Source Insight(以下简称SI)是世界上最好的编辑器”,说这句话不知道会不会出门被打呢?-_- 中国古话说得好,“文无第一,武无第二”,所以不敢说SI是最好的,但是说是“最好的之一”绝对是妥妥的。它以丰富的语言支持、便捷的功能、快速的源码导航、实时的上下文显示、独立的符号数据库等众多优点,在全世界范围内广受程序员们的欢迎。本文将结合笔者的实际操作和学习,基于SI3.5做一些使用记录。另外,笔者对SI的使用,主要是用于阅读源码,本文介绍的功能也是基于阅读方面的。
本文的主要内容如下:
一、SI简介
SI是一款面向项目开发的程序编辑器和代码浏览器,它提供了一个视图将分散在各个地方的代码汇合在一起形成一个虚拟的整体,供开发者方便地阅读和编辑,如下图所示。
Source Insight was designed to enhance your ability to understand and modify your program. Our company mission is to increase programming team productivity by clarifying source code, presenting information in a useful way, and allowing programmers to modify software in large, complex projects. ……Source Insight acts as an information server that surrounds your project’s source code. With it, you can have instant access to symbolic and textual information in your program.
该段英文摘自SI官方帮助文档,从这里可以看出SI的设计宗旨就是方便开发者查看和修改项目源码。
二、SI的优势
SI是如今最好用的语言编辑器之一,具有很多其他编辑器无法比拟的优点,比如下面几点。
1、支持语言种类多。
SI几乎支持所有的语言,如C、C++、C#、JAVA、ASM、PAS、ASP、HTML等,而其它编辑器往往只支持其中某类或某几种语言,丰富性远不及SI。
2、拥有自己的数据库。
SI自动传创建并维护他自己高性能的符号数据库,包括包名、函数、method、全局变量、结构、类、注释和功能源文件里定义的其它类型的符号等。我们可以通俗地理解为缓存,当需要再次查找某个符号时,就可以直接从数据库中查找,而不用在整个源码库中搜索,极大提高了效率。
3、显示丰富的程序相关信息。
SI提供了丰富多彩的窗口,为被选中的代码提供丰富的信息,如reference trees、class inheritance diagrams、call tress,symbol windows等。后面会专门介绍这些窗口的使用。
4、实时显示上下文信息。
SI提供了Context Window,当鼠标选择代码中的某个符号时,该window会实时显示选中符号的上下文信息。在下文中的Context Window会详细讲到。甚至在你编辑的时候,SI同时分析你的源码,提供实时的信息并进行分析。
5、快速。
提供了快速和革新的访问源代码和源信息的能力,能以最快的速度对源代码导航和提供任何程序编辑器的源信息。
参考资料:Source Insight 百度百科
三、创建项目
在SI窗口的顶部工具栏上依次点击 Project > New Project,即可开始创建一个新的项目了。之所以要特别介绍项目的创建过程,除了这是一个极常用的操作外,还有就是创建过程中有一些注意事项需要留心,笔者在使用过程中就曾经走过不少弯路,在这里特别记录一下。
1、项目命名及设置项目存储路径
2、项目设置
如下图,在红框部分选择需要打开的源码所在的路径,笔者最初使用的时候,就忽略了这里,导致在后面的步骤中,找不到源码,一度以为是SI版本异常了,所以这里特别提醒一下。其它的选项这里就按照默认的选择就可以了,笔者就是这么做的。当然,这个要根据用户自己需要来选择了,看个人喜好。
3、添加/删除项目文件
在这个界面上,可以看到左侧“Directory”这一栏的根节点,就是第二步“项目设置”中咱们选择的源码路径所在的盘符,如果你要添加的源文件不在这个盘符,就没法找到了。在该盘符下选择想要添加的文件,如蓝色部分“Android-8.0.0_r1”,这是Android 系统源码根目录,因为这里选择的是文件夹,所以点击右边的“Add Tree”来添加整个目录。如果选择的是文件,多个文件就选择“Add All”,单个文件就选择“Add”
添加时会给出对话框,表示正在添加。笔者添加的源码目录有4G以上,所以这时需要等待好几分钟的时间。
添加完成以后,可以看到对话框提示,点击“确定”即可,此时可以继续添加项目文件。
4、完成项目创建
当不需要再添加文件了,点击“Close”按钮关闭该界面,即完成了项目的创建。此时显示的界面如下,左下区域显示的就是新建的项目,列表显示了项目中文件。
四、常用窗口
SI的用户接口主要包含如下几种类型:(1)顶部主要菜单和工具栏;(2)用于编辑的源文件窗口;(3)可停放或浮动的工具窗口。由于SI是一个MDI(Multiple Document Interface,多文档接口),这意味着每一个你打开的源文件都拥有它自己的子窗口。在这一节中,将主要介绍主要菜单和最常用到的9个应用窗口。下图展示了主界面常用窗口概貌:
SI概貌图
1、主菜单(Main Menu)
和其他所有编辑器一样,主菜单栏包含了所有编辑器功能的入口。每一类功能又都分类到某个子菜单中,这一点自然不用多说,地球人都知道,就不一一展示每个子菜单和功能点界面了,一些常用和重要的操作,咱们后文详细介绍。
从上图可以看到,分类其实是非常简洁和明确的,看子菜单名称大概就能知道其中包含了哪些功能,很方便查找。这里笔者着重推荐一下“Help”子菜单。无疑,官方的帮助文档,是最权威,最全面的,如果英文不是太差,对某些功能不是太明白的话,完全可以从这个文档中去查找,笔者看过其中不少说明,其实还是很容易看懂的。如下为官方帮助文档概貌,内容还是比较全面的:
2、工具栏(Toolbars)
工具栏列出了不少比较常用的一些功能快捷按键,这个也是地球人都知道的吧。如下显示了SI设置的所有快捷工具图标。
(1)显示/隐藏工具栏
点击菜单栏View子菜单栏,点开Toolbars,就可以看到工具栏显示选择界面,可以在这里选择显示/隐藏哪些工具,如下图所示。也可以右键点击SI窗口顶部或工具栏空白处,也可以显示下图界面。
(2)工具栏工具简介
把鼠标停留在工具栏的图标上,会简单说明该工具的作用。咱们下面简单看看工具栏都包含了哪些功能,做到心中有数,这有助于以后快速定位到某些功能的入口而不用每次都到菜单栏中去找,少走一些弯路。
1)标准工具栏(Standard Toolbar):包含了基本的文件操作
2)编辑工具栏(Edit Toolbar):包含一些基本的编辑操作
3)搜索工具栏(Search Toolbar):包含了一些搜索命令
4)导航工具栏(Navigation Toolbar):包含了一些界面导航功能。
a)Go To Previous Link / Go To Next Link:在搜索结果界面,用于跳转到前一个/后一个结果的链接。
b)Go Back/Go Forward:回到上个/下个操作界面;
c)Go To Line:跳转到某一行
d)Bookmarks:添加书签,或定位到书签处。鼠标光标停留在编辑窗口的某一行,点击该按钮,会显示如下界面。可以选择在“Name”处输入书签名并点击“Set”按钮,新增一个书签;也可以在“Marks”处显示的书签列表中选择一个书签,双击或者点击“Go To”按钮,就可以跳转到该书签对应的代码处了。对于要经常查看某处代码,这个工具算是相当给力了。
5)符号工具栏(Symbol Toolbar):用于访问一些符号信息(这里说的符号,前面第二大点第2小点讲过其含义了,不明白的可以返回去看看)。
a)Jump To Definition:跳转到选中的某个符号定义的地方。其实当在编辑器中用鼠标选择某个符号,如果打开了“Contex Window”的话,可以在“Context Window”中实时看到该符号的定义处,这个后面讲到该窗口时再详细讲,这里不赘述。
b)Symbol Info:弹出对话,显示选择的符号的相关信息,以及一些操作按钮,如下图所示。可以看到上面“Jump To Definition”是这里的一个小功能。
c)Browser Project Symbols:可以查看整个项目中的符号列表。
d)Look up References:显示该符号被引用的地方。会弹出一个对话框,根据选择的搜索条件进行搜索,显示一个搜索结果窗口列出这些引用信息(由于该该窗口尺寸原因,这里不好显示,就不贴图了)。其实在“Relation Window”中,也会实时显示这些应用列表的,这个后面在讲该窗口时会详细讲,这里就不赘述了。
6)窗口工具栏( Window Toolbar):用于控制窗口的排列
7)帮助工具栏(Help Toolbar):访问帮助文档。
点击“Help Mode”后会出现一个“?”,将其拖到你想寻求帮助的地方,就会显示该处相关的帮助文档。
8)视图工具栏(View Toolbar):开启/隐藏常用的几个窗口,后面会专门对这几个窗口做介绍。
9)构建工具栏(Build Toolbar):运行和编译项目。
10)版本控制工具栏(Source Control Toolbar):包含了操作版本控制的相关工具。
3、源文件窗口(Source File Windows)
源文件窗口,可以称作是SI的主角了,因为源码都显示在这个窗口,可编辑,可同时打开多个窗口,在左上角红框处显示了源文件文件名和路径。
在源文件窗口选中某个符号并点击右键,会显示一个功能菜单,可以对源文件进行操作,如下图所示:
这些功能有些是基本操作,有些是“见名思义”,一看就知道功能,有些在前面介绍工具栏的时候介绍过,这里就不再一一说明了,仅选择性简单介绍几个:
- Highlight Word 将文件中所有所选单词高亮显示,再次点击会取消高亮。比如截图中选择“reason”并高亮,文件中的所有“reason”这个单词都高亮了。另外,这个功能对注释区无效。
- Special Window Color/Remove Special Window Color 设置和取消编辑窗口的背景颜色。
- Keyword List 显示当前文件所有的的关键字列表。
- Style Properties
- Document Options 设置编辑区文字颜色、大小、间隔等属性。
- Language Properties
- Edit Condition
4、符号窗口(Symbol Windows)
符号的概念前面第二大节第2小点解释过,不清楚的可以往前翻看。该窗口和源文件窗口相依相存,同时出现或隐藏,它显示在源文件窗口的左边,展示了当前文件中的所有符号列表。如下图所示:
顶部显示了文件名;搜索栏中输入要查找的符号可以快速找到要找的符号;中间部分显示了符号列表,每一项前面都有一个符号,这些符号表示不同的符号类型;底部为工具栏,主要用于显示符号排序方式,决定显示哪些内容,字体颜色和大小等。(Tips:如果在操作过程中,发现该窗口为空白了,可以点击工具栏中的排序方式选择按钮,相当于刷新了一下,即可正常显示了,最开始笔者碰到这种情况的时候,曾经蒙圈过...)
在窗口区域内点击右键,会显示一个菜单栏,显示针对该窗口的一些操作功能,如下图所示:
值得注意的是,菜单栏中Cut~Select Symbol,操作对象是整个符号所代表的代码块,而不是符号所代表的字符串。比如鼠标选中某个方法符号,点击“Copy Symbol”后复制的就是整个方法了。这里有个比较生僻的功能——“Duplicate Symbol”,表示重复符号,将符号复制并粘贴,功能上看就相当于“Copy Symbol”和“Paste Symbol”一次组合使用了。菜单中剩余的功能基本上就是Window面板中搜索栏和工具栏中的功能,这里不赘述。
5、项目窗口(Project Window)
项目窗口显示了项目的相关信息,可以在SI顶部“View > Project Window”或者Toolbar中“Project Window”按钮来控制该窗口的显示/隐藏。
(1)概貌
如下图所示,为项目默认窗口的概貌图,我们可以看到,它显示了项目名称,快速搜索栏,中间的内容显示区和底部的工具栏,当然还有右上角的最大/最小化和关闭按钮。
(2)内容显示区
这个区域会根据“快速搜索栏”输入的关键字过滤出文件名或路径包含该关键字的匹配列表,上图中还显示了文件大小,和修改时间。这个区域的内容也会随着工具栏中的按钮的切换而变化显示内容。后面讲工具栏时会再讲到。双击某一项或者在某一项上点击右键调出的菜单中点击“Open”就可以快速进入到对应的源文件。
(3)工具栏
默认选择是显示,也可以通过在该项目窗口点击右键后显示的菜单栏“Toolbar”选项来显示/隐藏工具栏。窗口工具栏中黄框部分按钮用于切换内容显示区的显示内容;蓝框部分会根据黄框部分按钮的选择而有所变动,主要用于跳转到某些界面;绿框部分为项目窗口属性设置按钮,包括字体大小、颜色、背景色等。把鼠标指针放置在按钮上,会显示该按钮功能。
1)黄框中按钮功能如下:
- Project File List:项目文件列表。默认选择为该项,在“内容显示区”显示当前项目中的所有文件列表,并降序排列,如概貌图中所示。Tips:这里可以在搜索栏中灵活使用通配符,比如输入“*.java”再按“Enter”按键,可以筛选出所有的java文件;如果再输入“*”并“Enter”,则取消前面通配符效果,也可以理解是“*”表示显示所有。
- Project File Browser:项目文件浏览器,以目录树的形式显示。
- Project Document Types:按照文件的文档类型来分类显示。
- Project Symbol List:显示项目中符号列表。
注意:这里工具栏中黄色边框中的按钮,与其他几个界面有所不同了。
- Project Symbol Classes:按照符号的类型进行分类显示。
2)黄框中
前面也提到了,蓝框中的按钮是变化的。当左边切换到“Project Symbol List”或“Project Symbol Classes”这两个显示Symbol的界面时,蓝框中显示了4个按钮,这里的4个按钮和SI整体窗口顶部的工具栏中符号工具栏(Symbol Toolbar)一样,这里不赘述,不清楚的可以查看前面“工具栏”这一节。当选择的是其他3种界面时,显示的是概貌图中界面:Open Project、Add or Remove Project Files 和 Project Report。Project Report,生成当前项目中的统计数据,如下图(1)所示,可以选择一些统计项,点击“OK”按钮,会生成一个统计报告文件如下图(2)所示。
图(1)
图(2)
3)绿框中
绿框中按钮的功能是设置项目窗口的界面信息,如下图所示,可以设置显示内容,字体/颜色/大小等。
(4)右键菜单栏
在该窗口中点击右键,可以调起项目窗口的功能菜单栏,如下图所示。前面黄框部分按钮在切换显示内容是文件或符号的时候,菜单栏会有一点不同,但也是大同小异,这里不单独贴图了。这里单独提一下“Synchronize Files”,同步项目中的所有修改,其他功能或在工具栏中讲到过,或见名思义,就不赘述了。
6、关联窗口(Relation Window)
Relation Window也是SI的一个创新点,用于显示当前被选中的Symbol和外界的联系,比如被哪些地方引用,被哪些地方调用等。它和后面要讲到的Context Window一样,都是跟踪选中的Symbol而自动实时地变化。
(1)开关位置
可以在SI顶部菜单栏选择/取消“View > Relation Window”,或者在顶部Toolbar中点击“Relation Window”快捷按钮来显示/隐藏该窗口。
(2)窗口内容
当鼠标光标停留在某个Symbol上时,该窗口中会立即显示设置的关联内容,该窗口基本内容如下图所示:
图4.6.1
顶部“References”表示该窗口显示的内容与当前光标所在的Symbol是引用关系,这个关系可以在设置中选中,还有“Calls”、Contains等关系,后面会讲到。中间内容区显示了引用当前Symbol的地方,该例子中就是表示变量“_isFaceIDSwitchOpen”被当前类KeyguardUpdateMonitor中isFaceIDSwitchOpen()方法的第2760、2764、2769行引用。点击每一行会在Context Window中实时显示上下文。底部是该窗口的快捷工具箱。
(3)Toolbar各功能简介
从左往功能依次为
- Jump To Definition:将光标移动到所选项被定义的地方,可能是某个方法,或者某个类等。
- Symbol Info:弹出一个popup window,显示Relation Window中被选项的定义。
- Lookup Reference:搜索指定或者选中字段的应用情况,后面讲搜索的时候会详细讲到。
- Lock Relation Window:选中后表示锁住当前窗口,不会实时改变内容。
- Refresh Relation Window:刷新窗口。
- View Relation Outline:以大纲的形式显示内容,如图4.6.2所示。
- View Relation Horizonal Graph:水平显示内容,如图4.6.3所示。
- View Relation Vertical Graph:垂直显示内容,如图4.6.1所示。
- Relation Window Properties:窗口属性设置,里面功能点比较多,这里单独划出一个小节详细说明。
图4.6.2
图4.6.3
(4)Relation Window Properties
该对话框除了能设置字体,颜色等外观属性外,还能设置内容与光标选项的关系等多种内在联系。
图4.6.4
1)Automatic Symbol Tracking
设置Symbol自动跟踪相关属性,如下图所示。如果不希望自动跟踪Symbol,选择“Off”或者在Toolbar中选择“Lock Relation Window”即可。
这些选项字面意思比较简单,这里就不啰嗦了。
2)Automatic Expansion Option
Expand duplicate branches:是否展开重复的分支。
Level:展开分支的层级。比如设置为“2”,那么被Calls的函数,以及该函数再调用的函数都会显示。
3)View Relationship
单独设置被选中的Symbol类型与Relaiton Window中显示内容的关系,选中的类型不同,关系也不一样。该处列出了“Type”、“Functions”、“Variables/Constants”、“Classes”、“Files”五种类型,以及可以设置的关系。例如,如图4.6.4中,给“Functions”设置的是“Calls”关系,那么当鼠标选中某个函数,那么当前Relation Window中就会显示被该函数“Calls”的信息。
这些Relation可以分为3类,不同的类型匹配的速度也不一样,从快到慢依次为:
- Contains:显示当前symbol的内容。
- Calls:被当前symbol调用的其他symbol。比如选中了函数,则会显示被该函数调用的其他函数。
- References:显示有哪些symbol调用了当前symbol,作用范围仅在当前文件。比如,选中了某个函数,则会显示当前文件中调用了该函数的函数。在比较大的项目中,这项关系的匹配是比较耗时的。
对于“Group multiple references into one item” 以及“Columns”,其中的有些功能还没太明白,以后搞明白了再补上。
4)Graph按钮(最右边一列中的按钮)
该对话框主要用于设置关系图的外观,这个比较简单,不多说了。
(5)右键菜单栏
该菜单栏中的功能有的在前面讲到过,有的比较简单,就不一一列举。这里说一下“New Relation Window”,同一个窗口中可以同时打开多个Relation Window。开发者可以同时打开“Calls”关系窗口和“References”关系窗口,根据自己的需求决定,非常便利。
7、剪贴板窗口(Clip Window)
剪贴板窗口是一个浮动窗口,可以随意拖动和停留在界面中。它类似于剪贴板,但相比于剪贴板只能保存最近一次的剪切外,该窗口可以保留多个剪贴记录。
(1)开关位置
可以在SI界面顶部的Toolbar中点击“Clip Window”开关,或在顶部菜单栏“View > Clip Window”选择/取消来显示/隐藏该窗口。
(2)窗口内容
该窗口的显示信息如下图。每一个clip项都包含一clip名称和该clip的内容。
(3)Toolbar各功能简介
上图中最底部的Toolbar,从左往右功能如下:
- New Clip:创建一个新的clip。
- Delete Clip:删除选中的clip。
- Edit Clip:编辑选中的clip的内容。
- Cut To Clip:在“Source File Window”选中某字符串,点击该按钮,所选择部分将被剪切并弹出对话框创建一个新的clip,被剪内容将作为新clip的内容,clip名称需要自定义。
- Copy To Clip:与“Cut To Clip”类似,不同的是,该功能是复制选中的部分。
- Paste From Clip:选中某条clip,如果光标在“Source File Window”内,点击该功能按钮,会把clip内容粘贴在光标处。双击选中的clip也有同样的效果。
- Clip Window Properties:设置该窗口的一些属性
(4)右键菜单栏
在该窗口内点击右键,会显示如下菜单栏。其中功能上面基本都介绍了,这里不赘述,只简单补充一下“Show Clipboard”。当选中某个clip,并点击“Show Clipboard”,会弹出一个窗口显示该clip的内容,和点击“Edit Clip”非常类似,只是无法编辑。
8、搜索窗口(Search Results Window)
搜索功能绝对是一个最常用的功能之一了,使用十分频繁,下面对搜索功能及搜索结果窗口做一些基本的介绍。
(1)搜索功能入口
开发者可以点击顶部主菜单栏中“Search”选择搜索子功能,如下图4.8.1所示;或者在顶部Toolbar快捷工具栏中点击相应的快捷按钮进行搜索,如下图4.8.2红框部分;或者使用快捷键调出对应的搜索功能窗口,如下图4.8.1所示。
图4.8.1
图4.8.2
(2)Search
该功能主要在当前文件范围内进行搜索,根据自身的需要添加搜索条件,一般选择默认就可以了。
图4.8.3
- Find:需要搜索的字符串,点击右边倒三角可以查看并选择历史搜索记录。
- Case Sensitive:大小写敏感。
- Use Regular Expressions:使用正则表达式。
- Wrap Arround:(还没清楚其作用)
- Select When Found:找到该字符串时,该字符串被选中。
- Whole Words Only:只包含整个要搜索的字符串。如果不选中,则包含欲搜索字符串的字符串都会被搜索到。
- Forward/Backward 以当前文件中鼠标光标所在处为参照点,向前/向后搜索。与图4.8.1或图4.8.2中“Search Forward”/“Search Backward”功能一致。
- Selection 在当前文件可见范围内搜索。
- Whole File (截图红框①处):在当前整个文件内搜索。
- Search(截图红框②处):如果能搜索到,鼠标只会定位到满足条件的某一个搜索结果处。
- Whole File(截图红框③处):点击该按钮,会在当前整个文件中进行搜索,如果有多个搜索结果,会显示一个搜索结果列表,如下图4.8.4所示。
- Files(截图红框④处):点击该按钮,会跳转到“Search Files”功能界面,下面会详细介绍。
图4.8.4
(3)Search Files
与“Search”功能相比,这里用于在多个文件中进行搜索。如下图所示,为其功能界面,以下将对该功能进行简单介绍。
图4.8.5
1)先看“Options”(上图红框②处)中各选项的含义(在“Search”功能中讲到过的选项含义,这里不再赘述):
- Project Wide:在整个项目范围内的所有文件中进行搜索。
- Include Subdirectories:在图4.8.5红框①处如果选中的是目录,该选项用于选择是否要在该目录的子目录中进行递归搜索。
- Find Non-Matching:
- Skip Inactive Code:跳过无效代码查找。
- Skip Comments:跳过注释查找。
- Search Only Comments:仅在注释中查找。
2)Find:在“Search”功能中讲过,这里不赘述。
3)File Name:制定查找范围,可以是具体的某个文件,也可以是某个文件夹。可以图4.8.5红框①处中选择,也可以在截图右下角点击“Browser”按钮进行选择。左边的倒三角点击后,显示历史记录列表。
4)图4.8.5红框①区:该区域会显示具体的文件或者目录。点击③处“Show Dirs”,该按钮显示的文字会在“Show Dirs”/“Show Files”之间换号,①区内容也会随之变化。在②区选择“Project Wide”也会显示所有文件,选择“Include Subdirectories”则会显示目录。
5)Search Results:④区中的选项为设置搜索结果需要显示哪些内容,如图4.8.4所示。
值得注意的是:在选择源文件的时候,不是硬盘中所有的文件都能显示,这里和前文介绍新建项目时所选择的源码路径所在盘符有关。
(4)Search Project/Lookup Reference
“Search Project“和”Lookup Reference”功能界面除了左上角标题栏不同外,其它一模一样,这里就以“Lookup Reference”为例,如下图所示。
1)Search Method:这里有四个选项
- Simple String:最普通的形式,把搜索项作为字符串,可以查找文件中出现的任意字符或者字符串,当工程比较大的时候查找比价慢。
- Regular Expression:正则表达式方式搜索。可以参考:【Source Insight搜索正则表达式使用技巧】
- Keyword Expression/Lookup Reference:这两种方式查找的结果基本相同,只是显示方式略有差异。有些文章中说,这两种方式都是使用SI预先建立的数据库,查找起来速度相当快,但通常这种速度只在查找标识符时有明显效果,且强烈建议像函数名、变量名等的查找,用这两种方式进行查找。这里笔者声明一下,笔者暂时还没体验到这里说的快速,在浩瀚的源码中搜索某个函数或变量时,都很费事,所以这里不敢打包票。
2)Lines of Context:每一条结果项显示的行数。前面我们可以看到,不同方式的搜索结果种,有的只显示一行,有的显示多行,就和这里有关。有的行数可以编辑,而有的不能编辑。
3)Search In:指定搜索范围。
4)Find Reference To:这个lable会根据“Search Method”中方式的选择而变化。其中的内容为搜索项,点击倒三角会显示搜索记录列表。
(5)Search Result Window
其实前面已经讲到过该窗口了,当搜索完后,会展示一个窗口用于显示搜索结果,如下图所示,红色框中显示了有多少个匹配项,多少个文件。主内容区也显示文件名,所在行数等信息。
图4.8.10
下图是一个完整的搜索结果及其它窗口交互界面。当选择“Search Result Window”中某一项时,会在“Context Window”中实时显示其上下文内容,如下图中④去所示。在搜索结果项前都有一个红色按钮,如③区所示。点击对应项该按钮,会显示其对应的“Source File Window”及所搜索字段所在位置,且也有一个红色按钮,如下图②区所示,点击这些按钮,界面会在“Source File Window”和“Search Result Window”之前来回切换。下图①区显示的Toolbar按钮,我们在前面讲Toolbar的时候介绍过,是"Go To Previous Link / Go To Next Link",此时点击这两个按钮会跳转到前一个/后一个搜索结果链接。
图4.8.11
(6)其他
在图4.8.1中“Search”子菜单中还有很多选项,有的比较简单,有的前文中陆陆续续介绍过,这里就不赘述了。
9、上下文窗口(Context Window)
上下文窗口是SI中一个革新功能,在用户浏览或者编辑源码过程中,会实时自动显示鼠标点击或选中部分的相关信息,可以简单地看做是预览功能。
(1)开关位置
上下文窗口的显示/隐藏开关位于菜单栏“View > Context Window” 或 Toolbar中“Context Window”按钮。
(2)窗口内容显示
上下文窗口位于前面SI概貌图的左下角,其显示内容,会根据鼠标所选取或点击的内容的类型而有很大差别。下表总结了不同的鼠标行为与相应的上下文窗口显示结果(摘自SI官方帮助文档):
1)在源文件窗口操作时
如果选中的是源文件窗口中的符号或局部变量,参数等,该窗口会显示选中内容被定义(如果是方法、类或结构体等,下同)或声明(如果是全局变量或引用等,下同)的上下文信息。如下图显示的是在源文件窗口中选中“reason”时的结果:顶部显示了选中的内容“reason”,类型“Locol Variable”,所在文件名“SystemServer.java”,所在文件路径等;中间显示区高亮显示了“reason”的定义处,以及它所在的上下文信息——函数performPendingShutdown()内;底部为工具栏,这个后面单独讲到。
如果在源文件窗口中输入信息,如果以这个字符串开头的符号有多个,则会在上下文窗口中显示匹配的符号列表。如下图显示的就是在源码文件中输入“star”字符串后该窗口的表现。
2)在Project Window操作时
如果当前Project Window显示的是文件,且鼠标选中了其中一个文件,Context Window中显示的则是文件内容。
如果当前Project Window显示的是符号,鼠标选中后,Context Window中则会显示符号的声明或这定义的上下文代码。
3)在Clip Window操作时
当鼠标选中Clip Window列表中的某一项Clip时,Context Window顶部会显示当前内容类型为“Clip”,Clip名称为“Reason”,内容来源为“Text from Typing”,Clip内容为“Text Clip in Context Window”,当双击Clip内容时,会弹出一个编辑窗口,编辑其内容。
4)在Symbol Window操作时
如果当期鼠标选中的是Symbol中的某一个符号,那Context Window显示的是对符号的定义或声明。
5)在Relation Window操作时
如果当前鼠标选中的是Relation Window中的内容时,Context Window中显示的是该引用项所在的位置。如下图中,Relation Window显示的是SystemServer.java类中performPendingShutdown()方法中的局部变量reason的应用者列表,当鼠标点击最后一条时,Context Window就定位并高亮显示了该引用项的位置。
(3)底部工具栏
下图为Context Wiindow中底部的工具栏,黄框部分功能参考SI顶部Toolbar中部分,这里不赘述。蓝框部分功能为:Complete Symbol、Lock Context Window、Context Window Properties
- Complete Symbol:自动补全符号功能。即当用户在Source File Window区域输入字符串时,点击该按钮可以显示以该字符串开头的符号列表,供用户选择自动补全。如下图所示:
- Lock Context Window:上下文窗口锁。选中该按钮后,上下文窗口内容就会被锁住,不会实时变化;再次点击,则取消锁功能。
- Context Window Properties:上下文窗口属性。设置上下文窗口的字体类型/大小/颜色,背景色,跟踪属性,显示内容等特性。
(4)右键菜单栏
在Context Window上点击右键调出功能菜单如下所所示,除了红框中“Project-Wide Rename(顾名思义:项目范围内对选中项重命名)”外其他都在前面讲过了,这里不赘述。
五、帮助功能
正如大多数软件及开发工具包一样,官方提供的帮助文档就是最好的教程,SI也不例外。当然这需要读者有一定的英文文档阅读基本功,因为这类文档都是英文版的。从笔者的经验来看,语法什么的其实不那么复杂,关键的生僻单词可以查词典,也不是难事,反而是阅读的耐心才是阅读英文文档的关键。下面简单介绍一下SI的帮助相关的功能。
1、功能入口
点击SI顶部菜单栏“Help”子菜单栏,即可显示“帮助”相关的子功能
2、帮助文档
点击列表中的“Help”或者快捷键F1,会调出官方帮助文档来,如下图所示:
该部分提供了“目录”、“索引”、“搜索”、“书签”等搜索方式,搜索起来非常方便。从上面截图可以看到“Window Tour”,是不是似曾相识?没错,笔者前文将到的常用窗口功能,就有一部分是取材于该帮助文档。该文档的使用还是比较简单的,这里就不啰嗦了。
2、Help Mode
点击该项后,会在界面上出现一个鼠标箭头+“?”的符号,随着鼠标移动,只要在SI界面上点击某个窗口或按钮,就会调出帮助文档,并显示点击处相关的帮助信息。
3、HTML Help/SDK Help
用于加载本地的一些帮助文档。
4、Create Key List
会弹出如下文档,记录了SI的功能点,以及对应的快捷键。开发者可以在其中增、删、改、查快捷键。
5、Create Command List
形式上类似于上面的“Create Key List”,功能上显示了SI的功能点以及对该功能点的描述。
6、Toolbar帮助快捷按钮
在前文讲“Toolbar”的时候讲到过,这里再提一下。SI顶部Toolbar上有两个帮助相关的快捷按钮,如下图所示
这两个功能前面也都提到了,这里不赘述。
7、Other
菜单栏中还有“Serial Number”、“Source Insight Web Site”、“About Source Insight”功能,比较简单,主要用于显示一些SI的基本信息,这里也不啰嗦了。
笔者之所以特地用一个章节来写“Help”这个用法很简单的功能,是因为笔者在学习SI时,就极大地收益于该帮助文档。该文章中的不少内容也是取材于该文档。与此同时,从使用其他软件和SDK的经历来看,对官方帮助文档的作用有着深切的体会。所以笔者在以后的开发和学习中,会更加加强对官方文档的阅读,这一节也是用于勉励自己,也建议读者也能够养成阅读官方文档的好习惯。
六、宏(Marco)的使用
介绍SI,就不得不提到宏。宏是SI的一个强大的功能,有的人甚至认为是SI中最强大最有趣的功能。用户可以通过编写宏来实现自定义功能,极大地提高效率。笔者以前在网上找到过一个这方面写得挺好的教程,作者非常用心,笔者这里就不重复造这个轮子了(当然笔者在这方面经验和水平都有限-_-),这里把该教程分享出来:
链接: https://pan.baidu.com/s/1-Xi41nwnX94_PrawvXq1fA
提取码: ijpw
该教程介绍了当前广受欢迎的三个宏:Quicker、Code Review、Chnchar的使用,配置等方面的内容。如果下载有问题,可以和笔者联系:476526447@qq.com。
七、常用技巧
本节主要记录一些比较实用且比较零散的使用技巧。
1、查看最近打开的文件列表。
可以结合Toolbar中的“Go Back/Go Forward”快捷键使用。
2、自定义快捷键
开发者可以根据自己习惯,自行定义快捷键。功能路径为:Menu > Options > Key Assigments
选择要修改的功能项,点击“Assign New Key”会弹出上图底部的操作说明,按照操作进行即可自定义快捷键。如果想恢复默认,点击“Reset”按钮即可。
SI的功能太多了,笔者不可能全部能写出来,这里先从整体上做介绍并打好框架,后续笔者会根据自己的使用情况,慢慢完善。由于经验和水平有限,难免有描述错误或者不妥之处,请读者多多指教!