神器必会!特别好使的编辑器Source Insight_source insight4 clip作用(1)

112 阅读22分钟

已剪辑自: mp.weixin.qq.com/s/nA9VJeMjC…

“Source Insight(以下简称SI)是世界上最好的编辑器”,说这句话不知道会不会出门被打呢?-_- 中国古话说得好,“文无第一,武无第二”,所以不敢说SI是最好的,但是说是“最好的之一”绝对是妥妥的。它以丰富的语言支持、便捷的功能、快速的源码导航、实时的上下文显示、独立的符号数据库等众多优点,在全世界范围内广受程序员们的欢迎。本文将结合笔者的实际操作和学习,基于SI3.5做一些使用记录。另外,笔者对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几乎支持所有的语言,如C、C++、C#、JAVA、ASM、PAS、ASP、HTML等,而其它编辑器往往只支持其中某类或某几种语言,丰富性远不及SI。 2、拥有自己的数据库。
SI自动传创建并维护他自己高性能的符号数据库,包括包名、函数、method、全局变量、结构、类、注释和功能源文件里定义的其它类型的符号等。我们可以通俗地理解为缓存,当需要再次查找某个符号时,就可以直接从数据库中查找,而不用在整个源码库中搜索,极大提高了效率。 3、显示丰富的程序相关信息。 SI提供了丰富多彩的窗口,为被选中的代码提供丰富的信息,如reference trees、class inheritance diagrams、call tress,symbol windows等。后面会专门介绍这些窗口的使用。
SI提供了Context Window,当鼠标选择代码中的某个符号时,该window会实时显示选中符号的上下文信息。在下文中的Context Window会详细讲到。甚至在你编辑的时候,SI同时分析你的源码,提供实时的信息并进行分析。 提供了快速和革新的访问源代码和源信息的能力,能以最快的速度对源代码导航和提供任何程序编辑器的源信息。 参考资料:Source Insight 百度百科
在SI窗口的顶部工具栏上依次点击 Project > New Project,即可开始创建一个新的项目了。之所以要特别介绍项目的创建过程,除了这是一个极常用的操作外,还有就是创建过程中有一些注意事项需要留心,笔者在使用过程中就曾经走过不少弯路,在这里特别记录一下。 1、项目命名及设置项目存储路径 图片 如下图,在红框部分选择需要打开的源码所在的路径,笔者最初使用的时候,就忽略了这里,导致在后面的步骤中,找不到源码,一度以为是SI版本异常了,所以这里特别提醒一下。其它的选项这里就按照默认的选择就可以了,笔者就是这么做的。当然,这个要根据用户自己需要来选择了,看个人喜好。
图片 在这个界面上,可以看到左侧“Directory”这一栏的根节点,就是第二步“项目设置”中咱们选择的源码路径所在的盘符,如果你要添加的源文件不在这个盘符,就没法找到了。在该盘符下选择想要添加的文件,如蓝色部分“Android-8.0.0_r1”,这是Android 系统源码根目录,因为这里选择的是文件夹,所以点击右边的“Add Tree”来添加整个目录。如果选择的是文件,多个文件就选择“Add All”,单个文件就选择“Add” 图片 添加时会给出对话框,表示正在添加。笔者添加的源码目录有4G以上,所以这时需要等待好几分钟的时间。 图片 添加完成以后,可以看到对话框提示,点击“确定”即可,此时可以继续添加项目文件。 图片 当不需要再添加文件了,点击“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

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而自动实时地变化。 可以在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 OptionExpand 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”选择/取消来显示/隐藏该窗口。 该窗口的显示信息如下图。每一个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:使用正则表达式。

img img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取