source insight使用
sourceinsight用法
sourceinsight用法sourceinsight是一个非常实用的源代码阅读工具,它可以帮助程序员更加方便地阅读和理解源代码。
本文将介绍sourceinsight的安装、配置和使用方法。
一、安装sourceinsight下载sourceinsight的安装包,双击运行,按照提示进行安装即可。
安装完成后,打开sourceinsight,会看到一个欢迎界面。
二、配置sourceinsight1.配置语言sourceinsight支持多种编程语言,我们需要配置它支持的语言。
点击“选项”菜单,选择“语言配置”,在弹出的对话框中勾选需要支持的语言,如C、C++、Java等。
勾选完成后,点击“确定”按钮保存配置。
2.配置字体sourceinsight默认的字体可能不太适合我们的阅读习惯,我们可以修改字体。
点击“选项”菜单,选择“字体配置”,在弹出的对话框中选择需要修改的字体,如“文本字体”、“注释字体”、“关键字字体”等。
修改完成后,点击“确定”按钮保存配置。
3.配置颜色sourceinsight默认的颜色也可能不太适合我们的阅读习惯,我们可以修改颜色。
点击“选项”菜单,选择“颜色配置”,在弹出的对话框中选择需要修改的颜色,如“文本颜色”、“注释颜色”、“关键字颜色”等。
修改完成后,点击“确定”按钮保存配置。
4.配置文件类型sourceinsight默认只支持几种文件类型,如果我们需要阅读其他类型的文件,需要手动添加支持的文件类型。
点击“选项”菜单,选择“文件类型配置”,在弹出的对话框中点击“添加”按钮,输入需要添加的文件类型,如“*.py”、“*.html”等。
添加完成后,点击“确定”按钮保存配置。
三、使用sourceinsight1.打开文件点击“文件”菜单,选择“打开文件”,在弹出的对话框中选择需要打开的文件,点击“打开”按钮即可打开文件。
2.导航代码sourceinsight可以帮助我们更加方便地导航代码。
SourceInsight使用教程
SourceInsight使用教程
一.创建工程,添加源程序
1.打开Source Insight4.0,工具栏选择Project -> New Project,将弹出下列框图:
2.点击OK后,会弹出下列框图,填入工程的名称,以及工程文件生成的目录
3.点击OK后,如下图:
其中:
Add :基本的文件添加操作
Add All :添加整个工程所有的源文件(然后再选择是否递归添加子目录中的源文件,见上图对话框)
Add Tree :添加指定的文件夹以及其子目录下的源代码文件
Remove Tree :和Add Tree的功能相反
File Name可以不用写,完成点击close.
4.如没有出现下图,红色区域的栏目,按Ctrl + O即可
5.将添加的代码进行同步,生成阅读代码的索引和辅助文件,方便对源代码进行阅读;点击Project-->synchronization file,会弹出下图框图:
6.选择语言和后缀名的文件,点击Options-->File type Options,弹出下图框图:。
SourceInsight的几个经典用法
SourceInsight的几个经典用法1.如何找回失去的context windowcontext window 在看程序时很有用,当用户指向某个函数或变量时,在context window中都会有该变量或函数的定义;但有时会为了增加程序的容量或者不小心,将context window变成独立窗口,sourceinsight没有简单的菜单来恢复它。
下面介绍一种网上流传的方法:步骤为:•运行source insight, 点击Options->Save Configuration.选择“All settings”,点击"save"按钮。
•当“保存”对话框打开时,记下配置文件被保存的目录,它一般有以下形式:“My Documents/Source Insight/Setting”,退出,并不保存配置。
•找到上步中,配置文件中叫“GLOBAL.CF3”的文件,复制它,并重命名为如“OLD.CF3”的形式。
•重新启动SourceInsight,选择 Options->Load Configuration,去掉随之出现的对话框最上面复选框,同时选择"Display and Windows",点击右则的load按钮,在出现的对话框中,选择OLD.CF3配置文件。
•加载OLD配置文件后,再选择View->context window,消失的context window又会出现在你的面前。
2. SourcInsight中的标签在看程序时,有时会作比较,当在程序中看到相似处;或者修改程序时,要从一处搬代码到另一处且添加代码与源代码不在一个页面时,如何快速切换,这是个问题。
运用组合快捷键Ctrl+M,可以在一处记下一个书签,如果下一次想跳到这个地方来时,再次按下Ctrl+M,找到相应的书签,就可以快速的切换。
3.SourceInsight在任务地方都能打开对应的文件技巧:SourceInsight一般用来看程序,不用来编辑编译程序。
Source_Insight教程及技巧
Source Insight 使用简单说明Source Insight 是一个功能十分强大、使用也很方便的程序编辑器。
它内置对 C/C++、Java 甚至 x86 汇编语言程序的解析,在你编程时提供有用的函数、宏、参数等提示,因而,Source Insight 正在国际、国内众多的 IT 公司使用。
Source Insight 功能强大,它的窗口、菜单初一看来似乎很多,所以刚刚开始使用 Source Insight 的朋友往往觉得很麻烦。
这里本人结合自己的使用经验,简单说说 Source Insight 的 使用。
(本文以 McuSystem 为例,Source Insight 以 3.0 版本为例。
其他版本的 Source Insight 大同小异)和众多程序编辑环境一样,Source Insight 中也有 Project 。
建立工程的方法很简单:打开Source Insight ,选择 Project 菜单->New Project ; 在出现的对话框 中 选择并选择存放工程文件的文件夹,输入工程名(比如McuSystem ),点击“保存”;又出现一个对话框,在 Configuration 部分可以选择这个工程使用全局配置文件还是自己单独的配置文件,这个无所谓,(不过最好选择单独的配置文件),再点击“OK ”;再次出现一个对话框,这是选择文件添加到 Project 中,通过左边的树状图找到你想添加的文件,点击 Add 就可以了(如图 1)。
你可以将不通路径下的文件添加到同一个工程中,而不用拷贝源文件。
选择完后点击 Close ;1. 2. 3. 4. 图 1这样工程就建立好了,文件列表就出现在 Project Window 中(如果 Project Window 被关 闭了,可以选中 View 菜单->Project Window )。
点击 Project Window 中任意一个文件,文件 的内容出现在中央的编辑区了。
集成开发环境之Source Insight使用教程
它编辑器产品不同,Source Insight能在你编辑的同时分析你的源代码,为你
提供实用的信息并立即进行分析。
让编程更简单更高效更规范
项目管理(1)
①
新建一个项目
快捷键 Alt + Shift + N 可以打开新建项目对话框,然后根据提示填好项目存
文档窗口-文档类型选项窗口
Alt + Y 打开文 档类型选项窗 口,修改字体 显示大小、是
否显示行号、
解析语言选择、 工程文件过滤、 扩展tab键、 是否显示符号 窗口等。
文档窗口(3)
扩充1:Source Insight可以定义风格,菜单栏->选项->风格,即可以打开风
格窗口,可以新建一个风格或修改一个风格。风格可以继承(和C++继承差 不多)。
储位置,源文件位置等。然后会出现添加删除项目文件对话框,选中自己
想要编辑和浏览的文件添加即可,这样就建好了一个项目。
②
添加和删除项目文件
①
在添加删除文件前,可以先设置文件过滤器,菜单栏->选项->文档选项, 就可以看到文件过滤器了,怎么设置应该是一目了然的。
②
菜单栏->项目->添加或删除文件,即可打开添加和删除项目文件对话框。
quicker.em的使用
首先将这个文件加载到Base工程中,其次要定义一个快捷键调用
quicker.em中的宏 AutoExpand。
调用 AutoExpand 宏后,AutoExpand会根据当前文本内容自动调用
其他宏。
一般情况下都用快捷键 Ctrl + Enter 调用AutoExpand宏。 quicker.em 包括标准C语言扩展,标准说明生成,代码修改注释等。 quicker.em 的使用参考《Quicker使用说明.doc》
sourceinsight4用法
sourceinsight4用法SourceInsight是一款用于软件开发的集成开发环境(IDE),它主要用于代码浏览、编辑和导航等操作。
下面是一些SourceInsight的用法:1. 导入项目:打开SourceInsight后,可以选择“导入”或者“新建”项目,将你的代码文件导入到SourceInsight中。
2. 代码浏览:在SourceInsight的主界面,可以通过左侧的目录树来浏览和查看代码文件。
选中文件后,可以在右侧的编辑器中查看和编辑代码。
3. 代码导航:SourceInsight提供了多种导航功能,可以快速定位和跳转到代码中的特定位置。
例如,可以使用“跳转到定义”功能来查看变量或函数的定义位置。
4. 代码搜索:可以使用SourceInsight的搜索功能来查找特定的代码片段。
可以使用快捷键Ctrl+F来启动搜索功能,并输入你要查找的关键字。
5. 代码补全:SourceInsight具有代码补全功能,可以根据已输入的代码自动补全代码片段。
可以使用快捷键Ctrl+空格来触发代码补全。
6. 代码格式化:SourceInsight支持代码的格式化和美化,可以让代码更加清晰易读。
可以使用快捷键Ctrl+K+F来快速格式化选定的代码。
7. 代码调试:SourceInsight支持代码调试,可以在调试过程中查看变量、执行跟踪等操作。
可以使用快捷键F5来启动调试功能。
8. 插件扩展:SourceInsight支持通过插件来扩展功能。
可以根据自己的需要安装、配置和使用各种插件。
需要注意的是,以上是一些常见的用法,实际使用中可能会有一些差异和个性化的配置。
你可以根据自己的需求和习惯来使用和配置SourceInsight。
Source_Insight使用教程
作为一个开放源代码的操作系统,Linux附带的源代码库使得广大爱好者有了一个广泛学习、深入钻研的机会,特别是 Linux内核的组织极为复杂,同时,又不能像windows平台的程序一样,可以使用集成开发环境通过察看变量和函数,甚至设置断点、单步运行、调试等手段来弄清楚整个程序的组织结构,使得Linux内核源代码的阅读变得尤为困难。
当然Linux下的vim和emacs编辑程序并不是没有提供变量、函数搜索,彩色显示程序语句等功能。
它们的功能是非常强大的。
比如,vim和emacs就各自内嵌了一个标记程序,分别叫做ctag 和etag,通过配置这两个程序,也可以实现功能强大的函数变量搜索功能,但是由于其配置复杂,linux附带的有关资料也不是很详细,而且,即使建立好标记库,要实现代码彩色显示功能,仍然需要进一步的配置(在另一片文章,我将会讲述如何配置这些功能),同时,对于大多数爱好者来说,可能还不能熟练使用vim和 emacs那些功能比较强大的命令和快捷键。
为了方便的学习Linux源程序,我们不妨回到我们熟悉的window环境下,也算是“师以长夷以制夷”吧。
但是在Window平台上,使用一些常见的集成开发环境,效果也不是很理想,比如难以将所有的文件加进去,查找速度缓慢,对于非Windows 平台的函数不能彩色显示。
于是笔者通过在互联网上搜索,终于找到了一个强大的源代码编辑器,它的卓越性能使得学习Linux内核源代码的难度大大降低,这便是Source Insight3.0,它是一个Windows平台下的共享软件,由于Source Insight是一个Windows平台的应用软件,所以首先要通过相应手段把Linux系统上的程序源代码弄到Windows平台下,这一点可以通过在 linux平台上将/usr/src目录下的文件拷贝到Windows平台的分区上,或者从网上光盘直接拷贝文件到Windows平台的分区来实现。
source insight的简单操作
source insight的简单操作Source Insight是一款功能强大的源代码阅读器和编辑器,它能够帮助程序开发人员更加高效地阅读、浏览和编辑源代码。
本文将介绍Source Insight的一些简单操作,以帮助读者快速上手使用这款工具。
一、安装和启动我们需要下载并安装Source Insight软件。
安装完成后,双击桌面上的快捷方式或在开始菜单中找到Source Insight并点击打开。
这样就成功启动了Source Insight。
二、打开源代码文件在Source Insight的菜单栏中,点击“文件”-“打开”选项,选择要打开的源代码文件,然后点击“打开”按钮。
Source Insight 支持多种编程语言的源代码文件,比如C、C++、Java等。
三、浏览源代码Source Insight的界面分为多个窗口,包括文件视图、函数视图、符号视图等。
通过点击不同的选项卡,可以在不同的视图之间切换。
在文件视图中,可以浏览源代码文件的内容,并进行查找、替换等操作。
四、导航代码Source Insight提供了一系列导航功能,帮助开发人员快速定位代码的位置。
比如,可以使用“Go To”菜单中的选项,跳转到光标所在函数的定义处或者跳转到光标所在的变量的声明处。
五、代码补全Source Insight还提供了代码补全功能,可以根据已有的代码上下文,自动补全代码。
在输入代码时,按下“Tab”键或者使用快捷键“Ctrl+Space”,Source Insight会自动弹出代码补全列表,选择对应的代码即可。
六、代码分析Source Insight可以对源代码进行静态分析,帮助开发人员发现潜在的问题或者改进的空间。
比如,可以通过右键点击函数名,选择“Analyze”选项,Source Insight会分析该函数的调用关系并给出相应的提示。
七、书签功能Source Insight的书签功能可以帮助开发人员快速定位到重要的代码位置。
Source Insight使用技巧(全面)
--提高我们的工作效率 By andy.wei
一、初识篇 1、什么是Source Insight 2、直观Source Insight
二、深入篇 1、使用环境设置 2、常用功能及快捷键 3、添加自定义功能
一、初识篇
1、什么是Source Insight 2、直观Source Insight
(6)解决字符大小不一
(7)解决缩进问题
3、添加自定义功能
(8)解决汉字注释操作半删
(1)修改热键
半移问题
(2)添加自定义命令
(9)恢复Ctrl+a的全选功能
(3)添加宏功能扩展文件,
(10)恢复小键盘的“+,-,*,/” 修补或拓展SI功能
功能
1、使用环境配置
(1)汉化
汉化因人而异,将汉化了的Insight3.exe覆盖到安装目录下即可。
Project Window:
显示各类工程目录、文件以及定义类型等等
Context Window:
自动显示选中变量、函数、宏定义或者多个定义列表
Relation Window:
当编辑区中选中某个函数时:Relation Window 就出 现了该函数和该函数中被调用的其它函数的关系图;
当编辑区中选中某个宏、变量时:Relation Window 就出现了该宏、变量在整个工程中被引用的关系图
方法1:选上“View --> Draft View”, 就可以让每个字符的宽度一致了。快捷键 是 "Alt + F12"
方法2:解决中文注释字体间距太大: I.Options->Style Properties II.在左边Style Name下找到Comment Multi Line和Comment.在其右边 对应的Font属性框下的Font Name中选“Pick...” 设置为宋体、常 规、小四。确定,退回Style Properties界面,Size设为10。最后设 置Clolors框下Foreground,点“Pick...”选择一种自己喜欢的颜色。
c++使用source insight阅读技巧
Source Insight是一款非常强大的代码阅读和编辑工具,它可以帮助程序员更方便地阅读和理解源代码。
以下是一些使用Source Insight的阅读技巧:1. 使用符号跳转:在Source Insight中,你可以使用快捷键"Ctrl+Click"或"Shift+Click"来跳转到函数、变量或类的定义处,这样可以让你更快速地了解它们的用途和定义。
2. 利用大纲视图:Source Insight的大纲视图可以显示当前文件的结构,包括函数、类、变量等。
这个视图可以让你更容易地了解代码的结构,并且可以快速导航到各个部分。
3. 使用注释和文档:Source Insight可以显示函数、类和变量的注释和文档,这些注释和文档通常会提供有用的信息,帮助你理解代码的功能和实现。
4. 显示行号:在Source Insight中,你可以显示行号,这可以帮助你更容易地找到代码的位置。
5. 使用搜索功能:Source Insight的搜索功能非常强大,你可以使用它来查找特定的函数、类、变量或注释。
你可以使用快捷键"Ctrl+F"来打开搜索框,输入你要查找的内容,然后按下"Enter"键即可查找。
6. 定制快捷键:Source Insight允许你定制快捷键,你可以根据自己的习惯来设置快捷键,提高代码阅读和编辑的效率。
7. 使用自动完成:Source Insight的自动完成功能可以帮助你更快地输入代码,你只需要输入几个字符,然后按下"Ctrl+空格"键,Source Insight会自动显示出可能的选项,你可以从中选择你要输入的内容。
以上是一些使用Source Insight的阅读技巧,希望对你有所帮助。
source insight 基本用法
source insight 基本用法Source Insight是一款功能强大的源代码阅读工具,主要用于浏览、编辑和分析源代码。
以下是一些Source Insight的基本用法:1. 源代码导入:在Source Insight中,可以通过选择“File”菜单中的“Open”选项来导入源代码文件或整个项目文件夹。
支持多种编程语言,例如C/C++、Java、Python等。
2. 导航和搜索:Source Insight提供了强大的导航和搜索功能,您可以使用快捷键或菜单导航到特定的函数、变量或文件。
此外,还可以使用“Find”功能进行全局搜索和替换。
3. 代码浏览:Source Insight支持以树形或层次结构的方式浏览代码,可以方便地查看和导航代码的层次结构、类和函数之间的关系。
还可以通过点击函数或变量来查看其定义和引用。
4. 项目管理:Source Insight允许您创建和管理多个项目,可以将源代码文件组织成目录结构,并设置文件过滤器来过滤特定类型的文件。
此外,还可以对文件进行版本控制和比较。
5. 语法高亮和自动完成:Source Insight支持源代码的语法高亮显示,不同的关键字、运算符和注释会以不同的颜色显示。
同时,也提供了自动完成功能,方便您快速输入代码并预测常见代码段。
6. 代码分析:Source Insight可以对源代码进行静态分析并生成一些关于代码质量和性能的报告。
还提供了代码度量工具,可以统计代码行数、函数数、文件大小等指标。
7. 代码调试:如果集成了调试器,Source Insight还可以进行代码调试,包括设置断点、单步执行代码、查看变量值等。
除了上述基本用法,Source Insight还具有许多高级功能,如代码片段管理、代码注释、代码重构等。
尽管Source Insight界面复杂,但熟悉了基本操作后,可以更高效地阅读和编辑源代码。
source insight 高级用法
source insight 高级用法
Source Insight 是一款功能强大的代码阅读和编辑工具,主要用于C、C++ 和汇编语言的开发。
以下是一些Source Insight 的高级用法:
1. 多光标编辑:你可以在多个位置放置光标,然后同时编辑文本。
这对于同时修改多个地方非常有用。
2. 查找和替换:你可以在整个项目或当前文件中查找和替换文本或符号。
这个功能在重构代码时非常有用。
3. 代码折叠:你可以折叠或展开代码块,以更好地理解代码结构。
4. 自动完成:Source Insight 可以自动完成你的代码,这可以大大提高编程效率。
5. 导航:你可以快速导航到任何符号或函数的定义处,也可以快速浏览项目的层次结构。
6. 注释和取消注释:你可以选择注释或取消注释代码块,这对于理解代码逻辑非常有用。
7. 显示行号:你可以在编辑器中显示行号,这有助于快速定位代码。
8. 语法高亮:Source Insight 可以根据语法高亮显示代码,这有助于快速理解代码结构。
9. 自定义设*:你可以根据自己的喜好自定义Source Insight 的界面和编辑器设置。
10. 集成版本控制:Source Insight 支持与Git、CVS 等版本控制系统集成,可以方便地查看和管理版本历史。
这些只是一些基本的Source Insight 高级用法,还有更多高级功能等待你去探索。
source insight的用法
source insight的用法
以下是source insight的基本用法:
1. 打开文件:在菜单栏中选择File -> Open,或者在工具栏中点击Open File图标,选择要打开的文件。
2. 导航代码:使用快捷键Ctrl+Alt+鼠标左键,可以跳转到代码的定义处;使用快捷键Ctrl+Shift+鼠标左键,可以查看函数的调用处。
3. 搜索代码:在菜单栏中选择Search -> Find Symbol,在弹出的搜索对话框中输入要查找的关键字,可以搜索项目中的所有文件。
4. 编辑代码:在菜单栏中选择Edit -> Insert Mode,设置为插入模式后可以进行编辑;使用快捷键Ctrl+D可以快速复制一行代码;使用快捷键Ctrl+/可以注释一行或多行代码。
5. 分析代码:在菜单栏中选择Analyze -> Project,可以进行代码结构分析,生成函数调用图等。
6. 自定义配置:在菜单栏中选择Options -> Preferences,可以根据个人需求自定义设置,包括颜色显示、代码提示等。
7. 查看文件结构:在菜单栏中选择View -> Symbol Window,可以查看当前文件的函数列表、全局变量、宏定义等。
8. 快速切换文件:在菜单栏中选择Window -> Document List,可以查看已打开的文件列表,快速切换文件。
9. 保存文件:在菜单栏中选择File -> Save,或者使用快捷键Ctrl+S,保存当前文件。
Source Insight使用
宏的使用-添加文件头(2 宏的使用-添加文件头(2)
框中的部分就是添加的内容
宏的使用-添加函数头(1 宏的使用-添加函数头(1)
先选中函数名
宏的使用-添加函数头(2 宏的使用-添加函数头(2)
选中work/AddFuncHeader
框中的部分就是添加的内容
宏的使用宏的使用-#if 0
选中需要暂时删除的行
缩进— 缩进—选项更改
缩进— 缩进—更改后的效果
Source Insight 使用之 高级篇
宏的使用
使用宏的好处
• 方便的添加注释,方便阅读; • 方便的进行FEATURE控制,节约编程时间的同时能保 持良好的代码风格。
使用方法
• 打开Base工程 • 添加my NetEyeutils.em 文件, • 更改配置文件
Source Insight 使用指南
Source Insight 使用之 基础篇
功能— 功能—搜索
2
1
1. 大的搜索选项控制 2. 详细的功能选项
Source Insight的快捷键(1) Insight的快捷键(1
Source Insight提供很多好用的快捷键 • F9/F10: 向前/向后缩进1个Tab(4个空格) • Shift +F3/F4: 选中一个变量(函数)向前/后查找 • ALT+ ,/. :向前/后翻文件 • 小键盘 +/- :下/上一个函数 • CTRL+Shift+[ / ]:到本行所属的“{” / “}”所在位置 • CTRL+鼠标点击(=):跳到函数(变量)等的定义位置 • CTRL+M:标记一个位置 • Shift+F8:高亮选中的变量名(函数名)
SourceInsight使用指南
Source Insight使用指南目录1.Source Insight 基本设置 (3)1.1字体设置 (3)1.2自动缩进设置 (3)1.3其它设置 (4)2.Source Insight中的宏 (5)2.1使用宏 (5)2.2指定快捷键 (6)3.Source Insight中的自定义命令 (6)3.1如何自定义命令 (6)3.2指定快捷键 (7)3.3正则表达式语法 (7)3.4集成编译器 (8)3.5集成版本控制工具 (10)4.其它 (11)4.1特殊的注释 (11)1.Source Insight 基本设置1.1字体设置Option-〉Document Options 文档设置。
Screen Fonts 设置显示字体。
推荐使用等宽字体,如“Courier”,这样在代码对齐时容易处理,但中文字体显示有锯齿。
使用“宋体”字时,代码可能存在对齐问题。
1.2自动缩进设置Option-〉Document Options-〉Auto Indent 自动缩进设置。
详细缩进样式请参考Source Insight 帮助的Command Reference-> Document Options-〉Auto Indenting。
Auto Indent Type 选择 SmartSmart Indent Options 两个复选框都不要选择缩进后样式如:if(){}1.3其它设置Editing Options 编辑器设置Show line numbers 显示行号Show right margin 显示右边界线(边界线显示在Margin width 处)Tab width TAB键宽度,设置为 4Margin width 页空白宽度,页面右边界线的位置,设置为80。
选择后在编辑窗口右侧设置的宽度处出现分割线Show page breaks 显示页面分割线,选择后在编辑窗口出现打印页分割线●如果编辑窗口中的中文字符中间分割过大或者出现对齐问题时,请尝试如下设置:Options-> Preferences-> Display-> Spacing选择Layout tabstops using monospace calculations 和Layout spaces using monospace calculations●定制Open命令Options-> Preferences-> Files-〉Custom “Open” Command2.Source Insight中的宏2.1使用宏首先关闭当前使用中的Source Insight,然后复制macro\utils.em 到我的文档\SourceInsight\Projects\Base,覆盖原有的文件。
source Insight 使用大全
1、背景色选择要改变背景色Options->preference->windows background->color设置背景色2、解决字符等宽对齐问题。
SIS默认字体是VERDANA,很漂亮。
这网页上应该也是用的VERDANA字体。
但由于美观的缘故,VERDANA字体是不等宽的。
比如下面两行llllllllllMMMMMMMMMM同样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就可以了。
SourceInsight使用方法及技巧
SourceInsight使用方法及技巧1.安装和设置:- 打开 Source Insight,点击 "Options",选择 "Preferences"。
2.导入代码:- 在 Source Insight 中创建一个新项目。
- 通过 "Project" 菜单中的 "Add Files" 或 "Add Directory" 来导入源代码文件。
- 可以使用 "Ctrl + /" 进行注释和取消注释。
- 可以使用 "Ctrl + ." 快速跳转到定义。
4.查找和替换:- 可以使用 "Ctrl + F" 在当前文件中查找文本。
- 可以使用 "Ctrl + Shift + F" 在整个项目中查找文本。
- 可以使用 "Ctrl + H" 执行替换操作。
5.导航代码:- 可以使用 "Ctrl + ." 快速跳转到代码定义。
- 可以使用 "Ctrl + ," 快速返回上一个位置。
- 可以使用 "Ctrl + 鼠标左键" 快速跳转到代码定义。
- 可以使用 "Ctrl + Alt + 鼠标左键" 快速打开代码定义的结果。
6.浏览代码:- 可以使用 "Ctrl + T" 快速切换到其他打开的文件。
- 可以使用 "Ctrl + B" 显示当前函数的调用者。
- 可以使用 "Ctrl + Shift + B" 显示当前函数调用的函数。
- 可以使用 "Alt + -" 和 "Alt + =" 进行代码折叠和展开。
7.代码分析:- 可以使用 "Ctrl + ." 进行符号分析,跳转到符号的定义。
Source Insight 使用方法及技巧
PutBufLine(hbuf, Ln, StrMid(buf, 2, Strlen(buf)))
}
}
if(StrMid(buf,0,1) != "/"){
//需要添加注释
PutBufLine(hbuf, Ln, Cat("//", buf))
9 / 11
Source Insight 使用技巧
} Ln = Ln + 1 }
hbuf = GetCurrentBuf()
if(GetBufLine(hbuf, 0) == "//magic-number:tph85666031"){ stop
}
Ln = Lnfirst buf = GetBufLine(hbuf, Ln) len = strlen(buf)
while(Ln <= Lnlast) {
buf = GetBufLine(hbuf, Ln) //取 Ln 对应的行
if(buf == ""){
//跳过空行
Ln = Ln + 1
continue
}
if(StrMid(buf, 0, 1) == "/") {
//需要取消注释,防止只有单字符的行
if(StrMid(buf, 1, 2) == "/"){
SetWndSel(hwnd, selection) }
//2.添加“#ifdef 0”和“#endif”的宏代码,定义快捷键为 Ctrl+# macro AddMacroComment() {
hwnd=GetCurrentWnd() sel=GetWndSel(hwnd) lnFirst=GetWndSelLnFirst(hwnd) lnLast=GetWndSelLnLast(hwnd) hbuf=GetCurrentB 使用技巧
source insight 使用技巧
1 开胃菜-初级应用1.1 选择美丽的界面享受工作虽然不能以貌取人,但似乎从来没有人责备以貌取软件的。
SI的华丽界面,绝对符合现代花花世界的人的审美趣味。
在SI中,我们可以轻松地把各种类型关键字、变量、标志符、函数、宏、注释等定义为不同的颜色和显示方式(正体或斜体、加粗或正常、加下划线、放大显示等),总有一种方式能让我们一眼就能分辨出这个标识是什么。
1.1.1 字体选择在SI中样式是可以被继承,如果要从根本上改变字体,最简单的方式就是直接修改根样式中的字体,因为其它样式都会由此继承而来。
选择Options/Document Options页面内的Font Options中的Screen Fonts字体,即可改变根样式中的字体。
SI中的默认配置为Verdana字体,是一种非等宽字体,为了使编写的代码在各种编辑器中看起来都有良好的对齐效果,这里强烈建议使用等宽字体,Courier、New Courier和宋体等都是较好的选择。
1.1.2 颜色定义毕竟这是见仁见智的东西,所以从来没有统一的标准。
很多人并不喜欢SI提供的默认配置,那么我们就改吧。
选择Options/Style Properties页面,就可以在其中修改所有样式了。
选择等号(=)表示继承Parent Style,也可以选择Pick(或者ON/OFF等)去配置一个新值。
这完全视乎个人喜好。
1.1.3 标识符样式选择在与颜色定义一节同样的界面内即可完成此项配置。
1.1.4 背景色选择在希望要改变背景色的窗口点击鼠标右键(假定使用的是右手鼠标),选择上下文菜单的xxxWindow Properties项,然后点击弹出窗口的BackColor按钮,即可修改该窗口背景色。
对于SI的源码主窗口,只需选择上下文菜单的Special Window Color 项即可完成背景色修改。
1.2 配置合理的默认值高效工作1.2.1 使用合理的缩进我始终认为最容易获得认同的是关于这个选项的配置了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SourceInsight使用技巧(转)配置成简单好用的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里面。
Options菜单→Preferences →Typing卡→Auto Completion框,勾掉Use automatic symbol completion window(这里是SIS的全局设置)Options菜单→Document Options→Editing Options框中,勾掉Allow auto-complete(局部设置)上面两项必须全部勾选,才能启用Auto Completion功能Options菜单→Key assignments,通过关键词Scroll 找到Scroll Half Page Up,取消小键盘/;通过关键词Scroll 找到Scroll Half Page Down取消小键盘*;通过关键词Function找到Function Up,取消小键盘-,通过关键词Function找到Function down,取消小键盘+。
通过关键词save 找到save all,更改为ctrl+shift+a,通过关键词select找到select all,更改为ctrl +aSIS默认字体是VERDANA,很漂亮。
这网页上应该也是用的VERDANA字体。
但由于美观的缘故,VERDANA字体是不等宽的。
比如下面两行llllllllllMMMMMMMMMM同样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命令,日志中能够匹配模式的每一行(通常是含有错误信息的行)、就会被设置上一个SourceLink1.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)如果勾掉Smart Reference Matching,会搜索全部项目文件,并且Old Name框中不显示完全限定名;如果勾选Smart Reference Matching,无法重命名数组名,而且鼠标位置不正确时会报错。
应该如何应对?3、在SourceInsight中提供的正则表达式3.1在SourceInsight中提供的正则表达式正则表达式,是用来匹配复杂模式的特殊搜索用字符串。
正则表达式串中,许多字符具有特殊的含义。
例如,有个特殊的字符代表“行首”。
下面是SourceInsight提供的所有可用特殊字符∶Table 4.3: Regular Expression CharactersCharacter Matches^ (at the beginning only)beginning of line。
如^Hello,匹配Hello在句首。
.any single character[abc]any single character that belongs to the set abc[^abc]any single character that does not belong to the set abc*zero or more occurrences of the preceding character+one or more occurrences of the preceding charactert a tab characters a space characterw white space (a tab or a space character)我的JAVA_HOME是c:jdk,我的java源文件放于d:javasrc中,并命名为qn.java或qtn.java (其中n=1,2,…)。
观察JDK编译器某一次输出错误信息的格式∶D:javasrcQ3.java:3: ';' expected正则表达式为∶([dD]:javasrc[qQ][tT]*[1-9][0-9]*.java):([1-9][0-9]*)4、自定义命令自定义命令与项目相关,在一个项目中定义的所有自定义命令属于该项目、只对该项目有效(包括快捷键等)。
自定义命令类似于命令行批处理文件。
SIS允许自定义命令在后台运行;并可以捕捉自定义命令的输出、放置于文件中、或粘贴入当前光标插入点。
分别利用上面SIS对输出信息的处理方式,自定义命令对集成编译器相当有用,可以捕捉编译器输出并创建SourceLink寻错;自定义命令对于文本过滤也相当有用,可选中待过滤区块、运行Sort自定义命令、粘贴回选定区块、即完成文本过滤。
请按下面步骤创建自定义命令∶Options菜单→Custom Command→点右边Add钮、填入新自定义命令名称,或下拉左边Commands、选择命令进行修改→Run框、填入待执行命令行,可含有特殊元字符,见后面的元字符表→Dir框、执行命令行时应处的目录,如不填,以源代码文件所在目录为命令执行目录→勾选Output框的Capture Output、输出被捕捉,如果勾选Paste Output,输出被粘贴→勾选Control Group框中的Save Files First、SIS会在运行命令前先检查文件是否保存→勾选Control Group框中的Pause When Done、SIS会在命令结束后暂停、方便检查→勾选Source Links in Output框中的Parse Source Links,?/p>source insight常用宏转自:/Jupin/archive/2005/02/04/281020.aspx说明:该宏文件实现一些编码程中能会到的功能, 如添加文件头、函数说明和宏定义等, 使用时能自动添加文件名、函数名和当前日期.使用说明:1. Project->Open Project... 打开Base工程(该工程一般在"我的文档\SourceInsight\Projects\Base"中);2. Project->Add and Remove Project Files... 加入宏文件(即Gaoke.em);3. Options->Menu Assignments 打开Menu Assignments窗口, 在Command中输入Macro, 选中要使用的宏, 添加到合适的菜单中./*附上宏定义文件*//* t357.em - a small collection of useful editing macros *//*************************************************************************** **** InsFileHeader -- insert the information of file** modification history* --------------------* 01a, 23mar2003, added DESCRIPTION by t357* 01a, 05mar2003, t357 written* --------------------*************************************************************************** ***//*-------------------------------------------------------------------------I N S E R T H E A D E RInserts a comment header block at the top of the current function.This actually works on any type of symbol, not just functions.To use this, define an environment variable "szMyName" and set itto your email name. eg. set szMyName=raygr-------------------------------------------------------------------------*/macro InsFileHeader(){/*####################################################### ######################################################### ######### Set szMyName variable to your name ############### for example szMyName = "t357" ############################################################### ######################################################### ##*/szMyName = ""// Get current timeszTime = GetSysTime(1)Day = szTime.DayMonth = szTime.MonthYear = szTime.Yearif (Day < 10)szDay = "0@Day@"elseszDay = DayszMonth = NumToName(Month)hBuf = GetCurrentBuf()szpathName = GetBufName(hBuf)szfileName = GetFileName(szpathName)nlength = StrLen(szfileName)szInf = Ask("Enter the information of file:")szDescription = Ask("Enter the description of file:")hbuf = GetCurrentBuf()// begin assembling the title stringInsBufLine(hbuf, 0,"/************************************************************************** ****")InsBufLine(hbuf, 1, " * @szfileName@ - @szInf@")InsBufLine(hbuf, 2, " * ")InsBufLine(hbuf, 3, " * Copyright 1998-2003 Guangzhou Gaoke Communication Technology Co.,Ltd.")InsBufLine(hbuf, 4, " * ")InsBufLine(hbuf, 5, " * DESCRIPTION: - ")InsBufLine(hbuf, 6, " * @szDescription@")InsBufLine(hbuf, 7, " * modification history")InsBufLine(hbuf, 8, " * --------------------")InsBufLine(hbuf, 9, " * 01a, @szDay@@szMonth@@Year@, @szMyName@ written")InsBufLine(hbuf, 10, " * --------------------")InsBufLine(hbuf, 11, "**************************************************************************** **/")// put the insertion point inside the header commentSetBufIns(hbuf, 1, nlength + strlen(szInf) + 8)}/*************************************************************************** **** InsFunHeader -- insert function's information** modification history* --------------------* 01a, 23mar2003, added DESCRIPTION by t357* 01a, 05mar2003, t357 written* --------------------*************************************************************************** ***/macro InsFunHeader(){// Get the owner's name from the environment variable: szMyName.// If the variable doesn't exist, then the owner field is skipped./*####################################################### ######################################################### ######### Set szMyName variable to your name ############### for example szMyName = "t357" ############################################################### ######################################################### ##*/szMyName = ""// Get a handle to the current file buffer and the name// and location of the current symbol where the cursor is.hbuf = GetCurrentBuf()szFunc = GetCurSymbol()ln = GetSymbolLine(szFunc)// Get current timeszTime = GetSysTime(1)Day = szTime.DayMonth = szTime.MonthYear = szTime.Yearif (Day < 10)szDay = "0@Day@"elseszDay = DayszMonth = NumToName(Month)szInf = Ask("Enter the information of function:")szDescription = Ask("Enter the description of function:")// begin assembling the title stringsz ="/************************************************************************** ****"InsBufLine(hbuf, ln, sz)InsBufLine(hbuf, ln + 1, " * @szFunc@ - @szInf@")InsBufLine(hbuf, ln + 2, " * DESCRIPTION: - ")InsBufLine(hbuf, ln + 3, " * @szDescription@ ")// remove by t357. CutWord(szDescription)InsBufLine(hbuf, ln + 4, " * Input: ")InsBufLine(hbuf, ln + 5, " * Output: ")InsBufLine(hbuf, ln + 6, " * Returns: ")InsBufLine(hbuf, ln + 7, " * ")InsBufLine(hbuf, ln + 8, " * modification history")InsBufLine(hbuf, ln + 9, " * --------------------")InsBufLine(hbuf, ln + 10, " * 01a, @szDay@@szMonth@@Year@, @szMyName@ written") InsBufLine(hbuf, ln + 11, " * --------------------")InsBufLine(hbuf, ln + 12, "**************************************************************************** **/")// put the insertion point inside the header commentSetBufIns(hbuf, ln + 1, strlen(szFunc) + strlen(szInf) + 8)}/*************************************************************************** **** NumToName -- change the month number to name** modification history* --------------------* 01a, 05mar2003, t357 written* --------------------*************************************************************************** ***/macro NumToName(Month){if (Month == 1)return "jan"if (Month == 2)return "feb"if (Month == 3)return "mar"if (Month == 4)return "apr"if (Month == 5)return "may"if (Month == 6)return "jun"if (Month == 7)return "jul"if (Month == 8)return "aug"if (Month == 9)return "sep"if (Month == 10)return "oct"if (Month == 11)return "nov"if (Month == 12)return "dec"}/*************************************************************************** **** CutWord -- auto newline** modification history* --------------------* 01a, 24mar2003, t357 fix some bug* 01a, 05mar2003, t357 written* --------------------*************************************************************************** ***/macro CutWord(ncurLine, szInf){LENGTH = 63nlength = StrLen(szInf)i = 0 /* loop control */begin = 0 /* first character's index of current line */ pre = 0 /* preceding word's index */hbuf = GetCurrentBuf()// nline = GetBufLnCur()while (i < nlength){/* remove by t357nrow = 0sz = ""while (nrow < 80){if (nlength < 0)breaksz = Cat(sz, szInf[nrow])nrow = nrow + 1nlength = nlength - 1}InsBufLine(hbuf, nline, sz)szInf = szInf[nrow]}*/c = szInf[i]if (" " == @c@ && (i - b < LENGTH)){pre = i}else if (" " == @c@){szOutput = ""k = begin /* loop control */while (k < pre){szOutput = Cat(szOutput, szInf[k])k = k + 1}InsBufLine(hbuf, ncurLine, sz)ncurLine = ncurLine + 1begin = pre}i = i + 1}if (h != i - 1){szOutput = ""k = begin /* loop control */while (k < pre){szOutput = Cat(szOutput, szInf[k])k = k + 1}InsBufLine(hbuf, ncurLine, sz)ncurLine = ncurLine + 1}}/*************************************************************************** **** GetFileName -- get the filename only from the path** modification history* --------------------* 01a, 05mar2003, t357 written* --------------------*************************************************************************** ***/macro GetFileName(pathName){nlength = strlen(pathName)i = nlength - 1name = ""while (i + 1){ch = pathName[i]if ("\\" == "@ch@")breaki = i - 1}i = i + 1while (i < nlength){name = cat(name, pathName[i])i = i + 1}return name}/*************************************************************************** **** ReturnTrueOrFalse -- Inserts "Returns True or False" at the current line** modification history* --------------------* 01a, 05mar2003, t357 written* --------------------*************************************************************************** ***/macro ReturnTrueOrFalse(){szReturns = "return True if successful or False if errors."hbuf = GetCurrentBuf()ln = GetBufLnCur(hbuf)szCurLine = GetBufLine(hbuf, ln)DelBufLine(hbuf, ln)InsBufLine(hbuf, ln, "@szCurLine@@szReturns@")SetBufIns(hbuf, ln, StrLen(szReturns) + StrLen(szCurLine) + 3)}/*************************************************************************** **** InsHeaderDef -- Inserts the header define in the headerfile** modification history* --------------------* 01a, 05mar2003, t357 written* --------------------*************************************************************************** ***/macro InsHeaderDef(){hBuf = GetCurrentBuf()szpathName = GetBufName(hBuf)szfileName = GetFileName(szpathName)szfileName = toupper(szfileName)nlength = StrLen(szfileName)i = 0 /* loop control */szdefineName = ""while (i < nlength){if (szfileName[i] == ".")szdefineName = Cat(szdefineName, "_")elseszdefineName = Cat(szdefineName, szfileName[i])i = i + 1}szdefineName = Cat("_", szdefineName)IfdefineSz(szdefineName)}/*************************************************************************** **** PrintDate - print date on where the cursor point to* DESCRIPTION: -** Input:* Output:* Returns:** modification history* --------------------* 01a, 23mar2003, t357 written* --------------------*************************************************************************** ***/macro PrintDate(){szTime = GetSysTime(1)Day = szTime.DayMonth = szTime.MonthYear = szTime.Yearif (Day < 10)szDay = "0@Day@"elseszDay = DayszMonth = NumToName(Month)hbuf = GetCurrentBuf()ln = GetBufLnCur(hbuf)szCurLine = GetBufLine(hbuf, ln)DelBufLine(hbuf, ln)InsBufLine(hbuf, ln, "@szCurLine@ @szDay@@szMonth@@Year@")SetBufIns(hbuf, ln, StrLen(szCurLine) + 10)}// Ask user for ifdef condition and wrap it around current// selection.// 28mar2003, modified by t357.// 26mar2003, modified by t357.macro InsIfdef(){sz = Ask("Enter ifdef condition:")if (sz != ""){// IfdefSz(sz);hwnd = GetCurrentWnd()sel = GetWndSel(hwnd)hbuf = GetWndBuf(hwnd)// get line the selection (insertion point) is onszLine = GetBufLine(hbuf, sel.lnFirst - 1);chTab = CharFromAscii(9)// prepare a new indented blank line to be inserted.// keep white space on left and add a tab to indent.// this preserves the indentation level.i = 0 /* loop control */ich = ""while (szLine[i] == " " || szLine[i] == chTab){ich = Cat(ich, szLine[i])i = i + 1}InsBufLine(hbuf, sel.lnFirst, "")InsBufLine(hbuf, sel.lnFirst + 1, "@ich@#ifdef @sz@")InsBufLine(hbuf, sel.lnFirst + 2, "@ich@" # chTab)InsBufLine(hbuf, sel.lnFirst + 3, "@ich@#endif /* @sz@ */") SetBufIns(hbuf, sel.lnFirst + 2, StrLen(ich) + StrLen(chTab)) }}// Wrap ifdeinef <sz> .. endif around the current selectionmacro IfdefineSz(sz){hwnd = GetCurrentWnd()lnFirst = GetWndSelLnFirst(hwnd)lnLast = GetWndSelLnLast(hwnd)hbuf = GetCurrentBuf()InsBufLine(hbuf, lnFirst, "#ifndef @sz@")InsBufLine(hbuf, lnFirst + 1, "#define @sz@")InsBufLine(hbuf, lnLast + 3, "#endif /* @sz@ */")SetBufIns(hbuf, lnFirst + 2, 0)}/* A U T O E X P A N D *//*------------------------------------------------------------------------- Automatically expands C statements like if, for, while, switch, etc..To use this macro,1. Add this file to your project or your Base project.2. Run the Options->Key Assignments command and assign aconvenient keystroke to the "AutoExpand" command.3. After typing a keyword, press the AutoExpand keystroke to have the statement expanded. The expanded statement will contain a ### string which represents a field where you are supposed to type more.The ### string is also loaded in to the search pattern so you canuse "Search Forward" to select the next ### field.For example:1. you type "for" + AutoExpand key2. this is inserted:for (###; ###; ###){###}3. and the first ### field is selected.-------------------------------------------------------------------------*//*************************************************************************** **** AutoExpand - Automatically expands C statements** DESCRIPTION: - Automatically expands C statements like if, for, while,* switch, etc..** Input:* Output:* Returns:** modification history* --------------------* 01a, 27mar2003, t357 modified* --------------------*************************************************************************** ***/macro AutoExpand(){// get window, sel, and buffer handleshwnd = GetCurrentWnd()if (hwnd == 0)stopsel = GetWndSel(hwnd)if (sel.ichFirst == 0)stophbuf = GetWndBuf(hwnd)// get line the selection (insertion point) is onszLine = GetBufLine(hbuf, sel.lnFirst);// parse word just to the left of the insertion point wordinfo = GetWordLeftOfIch(sel.ichFirst, szLine) ln = sel.lnFirst;chTab = CharFromAscii(9)// prepare a new indented blank line to be inserted. // keep white space on left and add a tab to indent. // this preserves the indentation level.ich = 0while (szLine[ich] == ' ' || szLine[ich] == chTab) {ich = ich + 1}szLine = strmid(szLine, 0, ich)sel.lnFirst = sel.lnLastsel.ichFirst = wordinfo.ichsel.ichLim = wordinfo.ich// expand szWord keyword...if (wordinfo.szWord == "if" ||wordinfo.szWord == "while" ||wordinfo.szWord == "elseif"){SetBufSelText(hbuf, " (###)")InsBufLine(hbuf, ln + 1, "@szLine@" # "{");InsBufLine(hbuf, ln + 3, "@szLine@" # "}");}else if (wordinfo.szWord == "for"){SetBufSelText(hbuf, " (###)")InsBufLine(hbuf, ln + 1, "@szLine@" # "{");InsBufLine(hbuf, ln + 2, "@szLine@" # chTab);InsBufLine(hbuf, ln + 3, "@szLine@" # "}");}else if (wordinfo.szWord == "switch"){SetBufSelText(hbuf, " (###)")InsBufLine(hbuf, ln + 1, "@szLine@" # "{")InsBufLine(hbuf, ln + 2, "@szLine@" # "case ")InsBufLine(hbuf, ln + 3, "@szLine@" # chTab)InsBufLine(hbuf, ln + 4, "@szLine@" # chTab # "break;") InsBufLine(hbuf, ln + 5, "@szLine@" # "default:")InsBufLine(hbuf, ln + 6, "@szLine@" # chTab)InsBufLine(hbuf, ln + 7, "@szLine@" # "}")}else if (wordinfo.szWord == "do"){InsBufLine(hbuf, ln + 1, "@szLine@" # "{")InsBufLine(hbuf, ln + 2, "@szLine@" # chTab);InsBufLine(hbuf, ln + 3, "@szLine@" # "} while ();")}else if (wordinfo.szWord == "case"){SetBufSelText(hbuf, " ###")InsBufLine(hbuf, ln + 2, "@szLine@" # chTab # "break;") }elsestopSetWndSel(hwnd, sel)LoadSearchPattern("###", true, false, false);Search_Forward}/* G E T W O R D L E F T O F I C H *//*------------------------------------------------------------------------- Given an index to a character (ich) and a string (sz),return a "wordinfo" record variable that describes thetext word just to the left of the ich.Output:wordinfo.szWord = the word stringwordinfo.ich = the first ich of the wordwordinfo.ichLim = the limit ich of the word-------------------------------------------------------------------------*/ macro GetWordLeftOfIch(ich, sz){wordinfo = "" // create a "wordinfo" structurechTab = CharFromAscii(9)// scan backwords over white space, if anyich = ich - 1;if (ich >= 0)while (sz[ich] == " " || sz[ich] == chTab){ich = ich - 1;if (ich < 0)break;}// scan backwords to start of wordichLim = ich + 1;asciiA = AsciiFromChar("A")asciiZ = AsciiFromChar("Z")while (ich >= 0){ch = toupper(sz[ich])asciiCh = AsciiFromChar(ch)if ((asciiCh < asciiA || asciiCh > asciiZ) && !IsNumber(ch)) break // stop at first non-identifier characterich = ich - 1;}ich = ich + 1wordinfo.szWord = strmid(sz, ich, ichLim)wordinfo.ich = ichwordinfo.ichLim = ichLim;return wordinfo}。