缩进与TAB
1. Options菜单Document Options Editing Options框中,tab width= 4 Editing O
ptions框中,勾选Expand tabs(这样,按tab键、等价于输入4个空格)在严格的编码规范中不可以使用Tab,要使用空格。这个是节省工作的符合编码规范的好方法。 2. Options菜单Document Options选择合适的文件类型点击右边中间的Auto Indent
钮在弹出的框中,左边选中点Simple。这样在输入函数回车后\"{\"不会缩进,而是和函数名称对齐。
恢复ctrl+a的全选功能
Options菜单Key assignments,通过关键词save 找到save all,删除快捷键,通过关键词select找到select all, 更改为ctrl +a.
使用宏功能
安装宏文件
① 复制 到SourceInsight安装目录; ② Project→Open Project,打开Base项目; ③ 将复制过去的em文件添加入Base项目; ④ 将默认的utils.em文件从项目中删除。 ⑤ 重启SourceInsight
指定快捷键
插入文件注释
1. 添加环境变量MyName = ***
2. Options菜单Key assignments,通过关键词为macro InsertFileHeader,指定快捷
键ctrl+shift+f。
3. 重启SourceInsight后,可以使用快捷键盘为文件自动生成注释
插入函数注释
1. Options菜单Key assignments,为macro InsertHeader,指定快捷键ctrl+shift+i。
2. 重启SourceInsight后,可以使用快捷键盘为函数自动生成注释
使用SupperBack完成中文操作
1. Options菜单Key assignments,通过关键词为macro SuperBackspace、SuperDe
lete、SuperCursorLeft、SuperCursorRight、SuperShiftCursorLeft、SuperShiftCursorRight,分别指定快捷键:退格、del、<-、->、shift+<-、shift+->. 2. 重启SourceInsight后,可以自动操作中文,不会产生乱码问题。
完成TAB和空格的替换
1. Options菜单Key assignments,通过关键词为macro Tabs_To_Spaces指定快捷键
ctrl+shift+空格
2. 重启SourceInsight后,使用快捷键可以替换文件中的TAB为空格。
C++程序的自动补全功能
1. Options菜单Key assignments,通过关键词为macro AutoExpand指定快捷键ctrl
+shift+a
2. 重启SourceInsight后,在输入while、for、do、if等c++关键词后,使用快捷键可以
自动生成区块框架。
1,F8:本文件中查找符号; 2,F7:本工程中查找符号; 3,ctrl+K:复制一行;
4,ctrl+shift+k:从光标位置复制到本行最右端; 5,ctrl+u:剪切一行;
6,ctrl+;:剪切从光标位置到本行最右端; 7,ctrl+i:插入一行; 8,ctrl+j:减一行; 9,ctrl+h:替换;
10,alt+f8:打开或关闭Symbol window
11,alt+L:激活symbol window,即将焦点移到Symbol windows; 12,ctrl+shift+[:到块首; 13,ctrl+shift+]:到块尾; 14,ctrl+alt+[:到选择首; 15,ctrl+alt+]:到选择尾; 16,ctrl+end:到文件底部;
17,alt+0,ctrl++,ctrl+0:调到原型,即定义处;怎么这么多都可以,我也不知道啊:)
18,alt+,和alt+.:应该是往前和往前跳,有点乱,慢慢掌握吧 Ctrl+= :Jump to definition Alt+/ :Look up reference F9 :Jump to next reference F7 :Look up symbols
F8 :Look up local symbols F9 :Ident left F10 :Ident right Alt+, :Jump backword Alt+. : Jump forward F2: switch to next page F3 : search backward F4 : search forward F5: Jump to line ?
Ctrl+,/Ctrl+. Jump to last/past
Shift+F3 : search the word under cursor backward Shift+F4 : forward
F12 : incremental search
Shift+Ctrl+f : search in project
Others(Common in Windows system)
Shift+Tab: Moving foward(After text selected) Tab:Moving backward(After text selected)
Shift+(Up,Down,Left,Rght):Select code,do not have to using mouse cursor
Alt+F12:
退出程序 : Alt+F4 重画屏幕 : Ctrl+Alt+Space 完成语法 : Ctrl+E 复制一行 : Ctrl+K 恰好复制该位置右边的该行的字符 : Ctrl+Shift+K 复制到剪贴板 : Ctrl+Del 剪切一行 : Ctrl+U 剪切该位置右边的该行的字符 : Ctrl+; 剪切到剪贴板 : Ctrl+Shift+X 剪切一个字 : Ctrl+, 左边缩进 : F9 右边缩进 : F10 插入一行 : Ctrl+I 插入新行 : Ctrl+Enter 加入一行 : Ctrl+J 从剪切板粘贴 : Ctrl+Ins 粘贴一行 : Ctrl+P 重复上一个动作 : Ctrl+Y 重新编号 : Ctrl+R 重复输入 : Ctrl+\\ 替换 : Ctrl+H 智能重命名 : Ctrl+' 关闭文件 : Ctrl+W 关闭所有文件 : Ctrl+Shift+W 新建 : Ctrl+N 转到下一个文件 : Ctrl+Shift+N 打开 : Ctrl+O 重新装载文件 : Ctrl+Shift+O 另存为 : Ctrl+Shift+S 显示文件状态 : Shift+F10 激活语法窗口 : Alt+L 回到该行的开始 : Home 回到选择的开始 : Ctrl+Alt+[ 到块的下面 : Ctrl+Shift+] 到块的上面 : Ctrl+Shift+[ 书签 : Ctrl+M
到文件底部 : Ctrl+End, Ctrl+(KeyPad) End 到窗口底部 : (KeyPad) End (小键盘的END)
到一行的尾部 : End 到选择部分的尾部 : Ctrl+Alt+] 到下一个函数 : 小键盘 + 上一个函数 : 小键盘 -
后退 : Alt+,, Thumb 1 Click 后退到索引 : Alt+M
向前 : Alt+., Thumb 2 Click 转到行 : F5, Ctrl+G 转到下一个修改 : Alt+(KeyPad) + 转到下一个链接 : Shift+F9, Ctrl+Shift+L 回到前一个修改 : Alt+(KeyPad) -
向下滚动一行 : Alt+Up 右滚 : Alt+Right 选择一块 : Ctrl+- 选择当前位置的左边一个字符 : Shift+Left 选择当前位置右边一个字符 : Shift+Right 选择一行 : Shift+F6 从当前行其开始向下选择 : Shift+Down 从当前行其开始向上选择 : Shift+Up
选择上页 : Shift+PgDn, Shift+(KeyPad) PgDn 选择下页 : Shift+PgUp, Shift+(KeyPad) PgUp 选择句子(直到遇到一个 . 为止) : Shift+F7, Ctrl+. 从当前位置选择到文件结束 : Ctrl+Shift+End 从当前位置选择到行结束 : Shift+End 从当前位置选择到行的开始 : Shift+Home
从当前位置选择到文件顶部 : Ctrl+Shift+Home 选择一个单词 : Shift+F5
选择左边单词 : Ctrl+Shift+Left 选择右边单词 : Ctrl+Shift+Right
到文件顶部 : Ctrl+Home, Ctrl+(KeyPad) Home 到窗口顶部 : (KeyPad) Home 到单词左边(也就是到一个单词的开始) : Ctrl+Left 到单词右边(到该单词的结束) : Ctrl+Right
排列语法窗口(有三种排列方式分别按1,2,3次) : Alt+F7 移除文件 : Alt+Shift+R 同步文件 : Alt+Shift+S
增量搜索(当用Ctrl + F 搜索,然后按F12就会转到下一个匹配) : F12 替换文件 : Ctrl+Shift+H 向后搜索 : F3
在多个文件中搜索 : Ctrl+Shift+F 向前搜索 : F4
搜索选择的(比如选择了一个单词,shift+F4将搜索下一个) : Shift+F4
搜索 : Ctrl+F
浏览本地语法(弹出该文件语法列表窗口,如果你光标放到一个变量/函数等,那么列出本文件该变量/函数等的信息) : F8
浏览工程语法 : F7, Alt+G 跳到基本类型(即跳到原型) : Alt+0 跳到定义出(也就是声明) : Ctrl+=, Ctrl+L Click (select), Ctrl+Double L Click
检查引用 : Ctrl+/
语法信息(弹出该语法的信息) : Alt+/, Ctrl+R Click (select) 高亮当前单词 : Shift+F8 语法窗口(隐藏/显示语法窗口) : Alt+F8
关闭窗口 : Alt+F6, Ctrl+F4
最后一个窗口 : Ctrl+Tab, Ctrl+Shift+Tab
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中的两个可选项,这样得到的默认缩进效果为 while (1) { I }
每次都要手工去调整其缩进,其实只要把两个勾选项去掉,就可以得到 while (1) {
I }
何乐而不为呢? 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 查找
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预先建立的数据库,查找起来速度相当快。但通常这种速度只对在查找标识符时有明显效果。对于像函数名,变量名等的查找,强烈建议使用这两种方式进行查找。 2. Search Files
选择Search/Search Files或按Ctrl+Shift+F组合键,在弹出的Search Files窗口进行查找操作。 在File Name框中可以填入文件名或文件夹。注意当要查询的文件夹双包含子文件夹时,可以勾选Options中的Include Subdirectiories,实现对各层文件的递归搜索。
3. Search Project
选择Search/Search Project,在弹出的Search Project窗口进行查找
操作。操作与Loopup References几乎完全一致,它们各自保存上次搜索的配置。 2.1.2 替换
1. 单文件替换
选择Search/Replace或按Ctrl+H组合键,在弹出的Replace窗口进行查找操作。在Search项目里勾选Selection则仅对当前选中的文档部分进行替换。另外如果勾选了Confirm Replacements则是逐个确认替换,否则会同时替换所有符合替换条件内容。 2. 多文件替换
选择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窗口,这个用于处理数字顺序排列的情况相当有效,比如数组下标。例如现有代码
array[0] = 1; array[1] = 2; array[2] = 3; 现在要改为 array[0] = 0; array[1] = 1; array[2] = 2; array[3] = 3;
当然可以一个个修改,但最快的方式是在array[0] = 1;之前添加array[0] = 0;,然后列选数组下标,使用Renumber功能以 0为起始值重填数值。
Edit Condition
很多代码尤其是驱动代码,当中有大量的预编译定义,以实现对不同硬件配置的支持。在阅读这样的代码时最痛苦的是不能简单判断程序实际执行的代码分枝。大量分枝同时存在,常常会混淆我们的视听。比如对于下面的代码:
#ifdef DEV1
/* DEV1代码代码 */ #else
/* 其它设备执行代码 */ #endif
如果确定我们当前分析的是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 . [abc] [^abc] * + \ \\s \\w $ Matches 任意单个字符 任意属于集合 abc 的单个字符 任意不属于集合 abc 的单个字符 前面字符的0个或多个重复 前面字符的1个或多个重复 一个 tab 字符 一个空格符 一个空白符(包括 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调用 mytrace(\"Create parameter list... \"); 有时希望把它们全部注释掉,而有些时候又希望把它们全部恢复回来。这是个简单的例子,可以使用 ^\\(.*\\)\\(/\\*\\)\\(.*mytrace.*\\)\\(\\*/\\)___FCKpd___6nbsp;==> \\1\\3 把它们恢复回来,而使用 ^\\(.*\\)\\(mytrace\\)\\(.*\\)___FCKpd___7nbsp;==> \\1/*\\2\\3*/ 则完成把它们全部注释掉。 5 附录2-SI中的宏语言 我始终认为这是SI中最有趣的部分,这是一种功能强大的编程语言,几乎可以实现在编程过程可能使用到的各种功能。 这里不准备对如何实用宏语言进行编程作介绍(可参阅SI帮助文档。),只介绍如何使用已编好程序。为方便使用,我已把这些程序都集中放在utils.em文件中,下文就此文件进行论述。 该宏文件实现了一些在编码过程中可能会用到的功能, 如添加文件头、函数说明(使用时能自动添加文件名、函数名和当前日期)和宏定义,代码补全等。 使用说明: 1. Project/Open Project... 打开Base工程(该工程一般在\"我的文档/Source Insight/Projects/Base\"中); 2. Project/Add and Remove Project Files... 加入宏文件(即utils.em); 3. Options/Menu Assignments 打开Menu Assignments窗口,在Command中输入Macro,选中要使用的宏,添加到合适的菜单中. 推荐使用的宏:InsFileHeader、InsFunHeader、InsHeaderDef、InsIfdef和AutoExpand (为代码自动补全功能,建议建快捷键)。 关于AutoExpand的举例说明, 当你输入了 switch 且光标正处于switch后面,运行该宏则会得到 switch (###) { case break; default: } 对于InsFunHeader宏,如果有如下函数体 int nOpenConfigFile(char *pchMemConfig, char *pchFlashConfig, int nSize, int nMode) { I } 光标在函数体内时运行该宏,那么将会在函数体上方得到 /****************************************************************************** * nOpenConfigFile - * DESCRIPTION:- * * Input: N/A * Output: N/A * Returns: N/A * * modification history * -------------------- * 1.00, Apr 19, 2007, T357 written. * -------------------- ******************************************************************************/ 其中的函数名及编写日期自动按实际情况填充,T357串可通过修改utils.em文件,改成你需要的名字。 6 附录3-推荐格式 所谓人各有志,这里就不说啦。 7 结束 至此,已将我所知的所有关于Source Insight(未包括其附带的Macro语言)知识在此文档中描述出来。 因篇幅问题不能全部显示,请点此查看更多更全内容