前言“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个应用窗口。下图展示了主界面常用窗口概貌: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
- Project File List:项目文件列表。默认选择为该项,在“内容显示区”显示当前项目中的所有文件列表,并降序排列,如概貌图中所示。Tips:这里可以在搜索栏中灵活使用通配符,比如输入“*.java”再按“Enter”按键,可以筛选出所有的java文件;如果再输入“*”并“Enter”,则取消前面通配符效果,也可以理解是“*”表示显示所有。
- Project File Browser:项目文件浏览器,以目录树的形式显示。
- Project Document Types:按照文件的文档类型来分类显示。
- Project Symbol List:显示项目中符号列表。
- Project Symbol Classes:按照符号的类型进行分类显示。
- 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:窗口属性设置,里面功能点比较多,这里单独划出一个小节详细说明。
- Contains:显示当前symbol的内容。
- Calls:被当前symbol调用的其他symbol。比如选中了函数,则会显示被该函数调用的其他函数。
- References:显示有哪些symbol调用了当前symbol,作用范围仅在当前文件。比如,选中了某个函数,则会显示当前文件中调用了该函数的函数。在比较大的项目中,这项关系的匹配是比较耗时的。
- 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:设置该窗口的一些属性
- 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”功能界面,下面会详细介绍。
- Project Wide:在整个项目范围内的所有文件中进行搜索。
- Include Subdirectories:在图4.8.5红框①处如果选中的是目录,该选项用于选择是否要在该目录的子目录中进行递归搜索。
- Find Non-Matching:
- Skip Inactive Code:跳过无效代码查找。
- Skip Comments:跳过注释查找。
- Search Only Comments:仅在注释中查找。
- Simple String:最普通的形式,把搜索项作为字符串,可以查找文件中出现的任意字符或者字符串,当工程比较大的时候查找比价慢。
- Regular Expression:正则表达式方式搜索。可以参考:【Source Insight搜索正则表达式使用技巧】
- Keyword Expression/Lookup Reference:这两种方式查找的结果基本相同,只是显示方式略有差异。有些文章中说,这两种方式都是使用SI预先建立的数据库,查找起来速度相当快,但通常这种速度只在查找标识符时有明显效果,且强烈建议像函数名、变量名等的查找,用这两种方式进行查找。这里笔者声明一下,笔者暂时还没体验到这里说的快速,在浩瀚的源码中搜索某个函数或变量时,都很费事,所以这里不敢打包票。
- Complete Symbol:自动补全符号功能。即当用户在Source File Window区域输入字符串时,点击该按钮可以显示以该字符串开头的符号列表,供用户选择自动补全。如下图所示:
- Lock Context Window:上下文窗口锁。选中该按钮后,上下文窗口内容就会被锁住,不会实时变化;再次点击,则取消锁功能。
- Context Window Properties:上下文窗口属性。设置上下文窗口的字体类型/大小/颜色,背景色,跟踪属性,显示内容等特性。
版权归原作者所有,如有侵权,请联系删除。▍推荐阅读
成功为华为“续命:中国芯片之父张汝京
一个工程师的“噩梦”:刚分清CPU和GPU,却发现还有……这位“华为天才少年”,竟然要我用“充电宝”打《只狼》