1. 装完之后先别急着把工程拖进来
Source Insight 4 这软件在圈子里有个很奇特的评价:第一次用觉得界面朴素得有点过时,用过三四次之后就再也回不去了。它真正值钱的地方不是编辑能力,而是它那套符号索引——把几十万行 C 代码里散落的函数、宏、结构体、全局变量全部串起来,按住 Ctrl 点一下就能跳过去,还能顺着调用关系一层层往下摸。对做固件、驱动、RTOS 移植、Linux 内核裁剪的人来说,这套东西省下来的时间是以"天"为单位的。我自己的习惯是,一边在 Source Insight 4 里读固件代码,一边开着原理图和 PCB 文件对照引脚定义,代码里GPIO_Pin_5到底接到哪个网络,两边对着看,比翻文档快得多。
但它的默认设置偏"中性":给的是能跑的状态,不是顺手的状态。中文注释打开是乱码、跳转点了没反应、工程一大就卡到转圈、高分辨率屏幕上字糊成一团——这些问题我在带新人的时候听他们抱怨过无数遍,其实九成都能在几项设置里解决。这篇不讲功能列表,只讲那些我每次装完机器、换完电脑之后都会重新走一遍的设置项,以及每一项背后到底是什么在起作用。适合刚上手的新人,也适合用了两三年但一直没动过默认配置的老手。
1.1 编码与换行符:中文注释乱码的根子在这里
拿到一个国内老项目,第一件事不要急着跳转,先看注释显示正不正常。Source Insight 4 默认跟随系统编码,在中文环境下通常会被识别成 GB 系编码,这时候如果你的工程是 UTF-8 的,注释就是一堆问号和方块;反过来,一个十年前的工程全是 GB2312,你把默认改成 UTF-8,同样一片乱码。
调整入口在Options → Preferences → Files这一页,里面有一个默认编码的下拉框,可以选System Default、UTF-8、Chinese Simplified (GB2312)之类的选项。我的做法比较土但很稳:按项目而不是按软件来定。也就是打开一个老工程之前,先把这个下拉框切到 GB 系;打开新工程之前,切回 UTF-8。因为 Source Insight 4 的编码设置是全局的,不是跟着项目走的,这一点经常有人搞混,以为改了项目设置就生效了。
如果你手上是混合编码的工程——比如老的驱动部分是一套编码,新加的 BLE 协议栈是另一套——那全局设置只能照顾多数派,少数派文件单独处理。最省事的办法不是每次切来切去,而是花半天时间把工程统一成 UTF-8,用命令行工具批量转一次,转完提交一版到仓库,之后再也不用管。这个投入我做过两次,每次都很值。
换行符的问题更隐蔽。Source Insight 4 对 CRLF 和 LF 的处理有时候会显示成一个小方块或者奇怪的符号,尤其是在 WSL 或者 Linux 上 clone 下来的仓库里。如果你只在自己机器上读代码,影响不大;但如果要在 Source Insight 4 里直接改代码然后提交,就要注意别把整个文件的换行符给改了。我一般会在仓库根目录放一个.gitattributes,把文本文件统一声明成text=auto,让版本管理工具去处理归一化,编辑器这边就不折腾了。
还有一个容易踩的坑:BOM。有些 Windows 工具生成的源文件会在开头带一个不可见的 BOM 头,Source Insight 4 在解析这种文件的时候偶尔会在第一行出现奇怪的字符,甚至影响第一行的宏定义识别。遇到某个文件第一行总是解析不对,可以先查一下是不是有这个头。
1.2 字体、字号与配色:一天盯八小时的眼睛问题
代码阅读工具是长时间贴身使用的,字体这件事不能将就。Source Insight 4 的字体设置在Options → Style Properties(不同小版本菜单文字可能略有差别,找不到就在 Options 菜单里翻一下带 Style 字样的那一项),可以分别给"正文、注释、关键字、字符串、数字、宏"这些不同的样式指定字体和颜色。
字体我只推荐等宽字体,而且必须带中文。纯英文字体(比如 Consolas、Fira Code)配中文的时候,中文会走系统回退字体,结果就是中英文行高不一致、字宽不对齐,一段中文注释立刻把排版撑歪。解决方案是选一款中英文等宽的字体,比如思源系的等宽版本、更纱黑体的等宽版,这类字体的中文字符宽度正好等于两个英文字符宽度,注释里的对齐、表格、ASCII 图都不会错位。
字号方面,我从 10pt 一路调到 12pt,最后停在 11pt 到 12pt 之间。屏幕是高分屏的话,字号别调太小靠系统缩放去救,那样反而更糊,具体原因在第五节会讲。
配色我走的是"浅底深字"路线,但绝对不用纯白底配纯黑字,纯白底在晚上看久了眼睛发酸。我的背景是偏灰的米白,正文用深灰而不是纯黑,然后给预处理器宏单独一个醒目的颜色——这一点很多人忽略,但对读嵌入式代码极其重要,因为#ifdef、#define决定了哪段代码真正参与编译,颜色区分开了,一眼就能看出这段逻辑是不是被条件编译包住的。注释我用低饱和的绿色或灰蓝色,字符串用暗红,数字用深蓝,整体饱和度压得很低,长时间看不刺眼。
调好一套之后一定要导出。Source Insight 4 支持把当前的颜色方案保存成配置文件,换机器或者重装的时候直接导入,省掉重新配一遍的功夫。我个人的习惯是这份配置文件连同后面的键位配置一起放在个人网盘里,新机器十分钟就能恢复成熟悉的样子。
1.3 备份、自动保存与配置搬家
Source Insight 4 有个挺厚道的设计:所有配置都可以整体导入导出。在Options菜单里有 Load Configuration 和 Save Configuration 这类入口,操作很直接——在一台配好的机器上导出,在新机器上导入,字体、颜色、键位、编辑习惯一次性全部搬过去。
但这里有个容易被忽略的细节:导出的是软件级配置,不是项目状态。项目文件(Project)本身是独立的一组文件,里面记录了工程包含哪些源文件、符号数据库放在哪、条件编译宏怎么定义的。换机器的时候,项目文件也要一起带走,否则你导入完配置打开软件,发现工程列表是空的。更麻烦的是,如果项目文件里记的是绝对路径,而你新机器上的代码放在了别的盘符下,打开项目会提示找不到文件。
我的做法是让项目文件和源文件保持相对固定的位置关系,比如统一把代码放在一个固定的工作根目录下,项目文件放在代码目录的上一层。这样换机器时只要根目录结构一致,基本不用重新配。至于符号数据库,它是可以重建的,不用太心疼,真正要保护好的是项目配置本身。
自动保存这块建议开着,间隔别设太短。设成两三分钟一次比较合适,太频繁会在你正打字的时候触发写盘,大工程下能明显感觉到一顿。另外,读代码的场景其实很少改文件,如果你纯粹是拿它当阅读器用,把自动保存关掉也无所谓,但别忘了一旦开始改代码就打开。
2. 项目与符号数据库:跳转准不准全看这一层
Source Insight 4 的一切魔法都建立在符号数据库上。它做的事情本质上和编译器前端类似:扫描源文件,把每个标识符的定义位置、类型、作用域记录下来,存进一个索引里。你按 Ctrl 点击的时候,它去查这张表,然后跳过去。所以跳转不准、跳转不到、跳转慢,追根到底都是这张表的问题,而不是软件有 bug。
理解了这一层,很多操作就有章法了:新建项目的时候要告诉它去哪些目录扫;代码变了要让它重新扫;条件编译把代码藏起来了,要告诉它哪些宏是打开的。这三件事对应的就是下面三个小节,也是我认为最值得花时间理解的部分。
2.1 建项目时的路径规划与文件筛选
新建项目走Project → New Project,向导会让你填两样东西:项目文件放在哪(Project File Location)和源代码放在哪(Source Directory)。这两个强烈建议分开,别把项目文件直接扔在代码根目录下。
理由很实际:Source Insight 4 会在项目目录里生成一堆自己的文件,符号数据库、缓存之类的。如果你的代码目录同时是版本管理仓库的根目录,这些文件就会全部出现在待提交列表里,每次 commit 都要小心翼翼地筛选,迟早会误提交一次。我现在固定用一个独立的工作区目录,比如工作区下面分projects/和src/,projects/放 Source Insight 文件,src/放真正的代码,互不干扰。
扫文件的阶段更关键。向导第二步会列出它准备纳入的目录树,这里一定要动手做减法。一个典型的嵌入式工程里,真正需要读的代码可能只占三分之一,剩下的都是这些:
- 第三方 SDK、HAL 库、RTOS 源码,如果你不需要逐行读它,完全可以排除;
- 编译中间产物目录,里面往往有一堆预处理后的
.i文件、汇编输出、目标文件,纳入进来纯属给索引添乱; - 版本管理的内部目录,会包含大量历史对象,一个都不该进;
- 文档目录、图片资源,对符号索引毫无价值;
- 测试用例目录,如果只是想搞懂主流程,也可以先排除,需要时再加回来。
这里有个取舍要讲清楚:排除掉的东西,跳转就会断。比如你把 HAL 库排除了,代码里调用HAL_GPIO_WritePin的时候,Ctrl 点击就跳不过去,只能停在调用处。所以我的做法是分两档:日常读主业务逻辑的工程,排除库;需要深挖底层实现的时候,单独建一个"全量工程",把库也扫进去,只在需要的时候打开。两个工程共用同一份源码,互不影响。
另外提醒一句,项目文件里记录的文件路径默认是绝对路径。如果你的代码经常在不同盘符之间搬来搬去(比如从台式机拷到笔记本),扫完之后记得检查一下路径有没有失效,失效的会在项目文件列表里显示成异常状态,重新添加一下即可。
2.2 同步与重建:什么时候用增量,什么时候推倒重来
代码更新之后,Source Insight 4 有两种刷新方式:一种是增量同步,只重新扫描有改动和新增的文件;另一种是全量重建,把所有文件重新解析一遍。这两个操作在 Project 菜单里,一个叫同步(Synchronize),一个叫重建(Rebuild),很多人分不清什么时候用哪个,然后抱怨"我明明改了代码它怎么还跳到旧位置"。
判断标准很简单:改动小、结构没动,用增量;改动大、文件大量增删、或者跳转出现明显错误,直接全量重建。换了分支、拉了新版本、删掉了一整块模块,这些都算"结构动了",建议老老实实重建一次。
性能上的账也要算清楚。全量重建在几十万行的工程上可能要几分钟到十几分钟,取决于机器和磁盘。我一般会把这个动作安排在喝咖啡或者开会的时候做,不占工作时间。增量同步通常几秒到几十秒,改完代码随手同步一下就好。
还有一个开关值得注意:后台解析。Source Insight 4 可以在后台慢慢更新索引,好处是打开工程就能干活,不用等;坏处是在大工程上边打字边后台解析,输入会有轻微延迟。我的策略是:小工程开后台,大工程关后台手动同步。这个开关在不同版本里的位置不太一样,一般在偏好设置里带"后台"或"自动"字样的项,或者项目设置里的解析选项里,找一圈肯定能找到。
顺带说一句,符号数据库是可以在设置里查看大小的。如果你发现索引文件膨胀得离谱,通常意味着有超大文件被纳入了索引——比如某个几十兆的自动生成文件,或者一个巨大的数据表源文件。这种文件对阅读代码没有价值,果断从项目里删掉,索引立刻瘦身。
2.3 条件编译宏配置:解决整片代码变灰的问题
这是 Source Insight 4 最有价值、也最容易被忽略的一项设置。嵌入式代码里到处是条件编译:
#if defined(STM32F103xB) /* 一堆实际生效的初始化代码 */ #else /* 另一套平台的实现 */ #endif如果你没有告诉索引器STM32F103xB这个宏是打开的,Source Insight 4 会把整个分支当成"未启用",显示成灰色,并且不索引里面的符号。结果就是:明明文件里写着的函数,你 Ctrl 点击就是跳不过去。很多新人以为是软件坏了,其实只是少配了一个宏。
配置入口在项目设置(Project Settings)里,有一个专门管条件编译解析的页面,可以往里加宏定义。最省事的办法是直接抄编译器的参数:打开你的构建脚本、Makefile 或者 IDE 的编译选项,把所有-D开头的定义原样搬过来。这些就是编译器真正使用的宏,索引器和编译器看到的条件编译分支就完全一致了,跳转自然就准。
这件事我强烈建议一次做对。花十分钟把宏配全,后面几个月读代码都顺;图省事跳过这一步,后面每次遇到"跳不过去"都要重新排查一遍,成本高得多。
配完之后记得做一次全量重建,让索引按新的宏重新解析一遍,否则改动不会立刻生效。
2.4 语言解析绑定:别让头文件和汇编成了盲区
Source Insight 4 按文件扩展名决定用哪套解析规则。默认情况下.c、.cpp、.h都会按 C/C++ 解析,但有些扩展名它是不认识的,比如链接脚本.ld、启动文件.s、某些平台的.inc,这些文件不绑定解析规则的话,就是一坨纯文本。
真正会造成麻烦的是头文件的归属。嵌入式工程里.h文件里经常写大量的内联函数、宏函数、静态数组,如果这些文件没被正确解析,你在这个头文件里定义的函数,在.c里点它跳不过去。检查方法很简单:打开一个头文件,看里面的关键字有没有上色、函数名能不能被识别。如果一片素白,就是解析规则没挂上。
在偏好设置的 Languages 相关页面里,可以给每种语言指定它管哪些扩展名。我通常会把.h、.hpp、.inc都挂到 C/C++ 语言下,.s、.asm挂到汇编,.ld、.lds挂到链接脚本。这样即使不写代码,光靠高亮也能快速分清文件类型。
3. 编辑与阅读体验的常规调优
前面两节解决的是"能不能用"的问题,这一节解决"顺不顺手"。这部分设置没什么技术含量,但调过和没调过,一天下来的疲劳程度完全不一样。我的原则是:屏幕上的每一个像素都应该有它的用途,凡是你不看的窗口、不用的行、不需要的装饰,全部关掉。
3.1 语法高亮的分配策略
语法高亮不是越花越好。我刚入门的时候特别热衷于给每种符号配一个鲜艳的颜色,结果整个屏幕像节日彩灯,看十分钟眼睛就累。后来悟出一个原则:只给"我读代码时需要一眼分辨"的东西上色,其他都低调处理。
优先级排下来是这样的:
| 元素 | 建议处理 | 理由 |
|---|---|---|
| 预处理器宏、条件编译 | 醒目的颜色 | 决定代码是否参与编译,必须一眼看到 |
| 函数名 | 中高亮 | 阅读时的主要跳转入口 |
| 类型名、结构体 | 中等亮度 | 帮助快速识别数据流 |
| 注释 | 低饱和、低对比 | 需要时看,不需要时不抢注意力 |
| 字符串、数字 | 弱高亮 | 区分即可,不必醒目 |
| 普通变量 | 基本不上色 | 数量最多,上色反而干扰 |
另外,Source Insight 4 的高亮是可以按语言分别配置的。C 代码和脚本、Makefile 各有一套规则,不必强求统一。我一般只精细调 C/C++ 这一套,其他语言保持默认。
3.2 缩进、Tab 与自动对齐
缩进设置看着是小事,但在多人协作的工程里能引发真实的矛盾。Source Insight 4 里可以设置 Tab 键插入的是制表符还是空格、一个 Tab 显示几个字符宽度、回车之后是否自动继承上一行缩进。
我的建议是跟团队保持一致,不要按个人喜好来。如果团队用四个空格,你就设成 Tab 键插入四个空格;如果代码库里全是制表符,那你打开的时候必须把制表符宽度设成跟别人一样,否则你看到的缩进全是错的——别人写的是两层嵌套,你看到的是三层,逻辑就理解偏了。
这里有个常见现象值得说一下:有人的代码里制表符和空格混用,在自己编辑器里看着整整齐齐,换一个 Tab 宽度设置立刻歪掉。这种情况在别人维护过的老代码里特别多。如果你打算改这类文件,先统一成一种再动手,否则你的改动会跟原有的空白字符风格打架,版本对比的时候满屏都是无意义的差异行。
至于自动缩进和括号自动补全,我建议开自动缩进、关自动补全。读代码的时候手滑打出个括号,自动补一堆东西出来,反而要额外删,得不偿失。
3.3 行号、概览图与几个辅助窗口
Source Insight 4 提供了一整套辅助窗口,用好了效率翻倍,全开着又挤得慌。我现在的配置是:
- 行号:开。排查编译错误报的行号时不用数格子,也别指望从下往上数。
- 右侧概览条:开。整个文件的结构一眼可见,长文件里定位函数特别快。
- 上下文窗口:看情况。它能在光标停在一个函数调用上的时候显示被调函数的定义,读流程的时候非常省事,但会占屏幕宽度,笔记本上我一般关掉。
- 关系窗口:需要梳理调用关系的时候开,平时关。用它看"这个函数被谁调用了"比翻遍全工程快得多。
- 剪贴板窗口:几乎不用,关掉。
这些开关切换起来很快,不用纠结固定配置。我的做法是把最常用的两个窗口绑定到快捷键上,需要的时候一个键调出来,不需要就关掉,屏幕始终保持清爽。
3.4 搜索:项目级和文件级要分开用
Source Insight 4 的搜索经常被低估。它有文件内搜索和项目级搜索两套,用错了效率差十倍。
查一个局部变量的使用位置,用文件内搜索,秒出结果。想搞清楚一个宏在全工程里被引用了多少地方、都在什么上下文里使用,必须用项目级搜索,它走的是索引,比逐个文件暴力扫快得多,还能一眼看到所有引用点所在的文件。
搜索有几个细节值得注意:大小写敏感一定要按需切换。C 代码里GPIO_Init和gpio_init是两个完全不同的东西,不区分大小写会把一堆无关结果混进来。另外搜索结果的数量上限可以调,默认值有时候会截断结果,让你误以为"就这么几处引用",实际上还有几十处没显示——这种误判在重构的时候很危险,一定要养成看结果数量的习惯。
4. 快捷键、宏与外部工具:把重复动作压成一次按键
到这一层,Source Insight 4 才真正从"好用的阅读器"变成"顺手的生产工具"。前面调的是"看起来怎么样",这一节调的是"手怎么动"。别小看这点差别,一天重复几百次的动作,哪怕一次省半秒,累积起来也是可观的时间。
4.1 键位分配与冲突排查
Source Insight 4 的键位可以在设置里逐条重新分配。我的改键原则只有一条:把最高频的动作放在左手最容易够到的位置。
读代码时真正高频的动作其实就四个:跳到定义、返回上一位置、查找引用、切换文件。这四个动作我全部绑在左手单手可达的键上,右手可以一直放在鼠标或者方向键上,不用来回横跨键盘。默认键位未必符合每个人的手型,尤其是笔记本键盘,功能键区又小又挤,硬用默认键会很难受。
改键的时候有一个坑:冲突检测。你新绑一个键,它可能已经被别的命令占用了,Source Insight 4 通常会提示,但如果你随手点了确认,被覆盖的那个功能就悄悄失效了,等到几个月后你需要用它的时候才发现。我的习惯是改完之后把整个键位表导出成一份文本,隔一段时间对一眼,看看有没有异常。
还有一条经验:不要为了改而改。有些人装完软件第一件事就是把所有键位全改一遍,改完自己都记不住。只改你真正觉得别扭的那几个,其余的保持默认,反而更容易形成肌肉记忆。
4.2 宏:把重复的填写动作变一键
Source Insight 4 支持用类似 C 语言风格的宏脚本扩展功能,宏文件通常以.em作为扩展名。它的语法不复杂,内置了一批操作缓冲区、光标、文件系统的函数,稍微写两行就能干不少活。
举个我实际在用的例子。团队要求每个函数前面加一段固定格式的注释头,字段包括功能、参数、返回值。手写一遍要半分钟,写十个函数就是五分钟。我用宏做了一个一键插入:
macro AddFuncHeader() { hbuf = GetCurrentBuf() if (hbuf == 0) stop ln = GetBufLnCur(hbuf) InsBufLine(hbuf, ln, "/*") InsBufLine(hbuf, ln + 1, " * 功能:") InsBufLine(hbuf, ln + 2, " * 参数:") InsBufLine(hbuf, ln + 3, " * 返回:") InsBufLine(hbuf, ln + 4, " */") }把这段保存成.em文件,通过项目菜单里的宏文件入口加载,然后到键位分配对话框的下拉列表里找到AddFuncHeader这个宏名,绑一个顺手的键。之后光标停在函数上方,按一下,五行模板就出来了,剩下的只是填空。
写宏有几个心得。第一,先做小再做多,不要一上来就写几百行的复杂脚本,先从"插入一段固定文本"这种最简单的开始,跑通了再加逻辑。第二,宏能拿到当前缓冲区、当前行、选中内容,这三样东西组合起来基本能覆盖大部分文本批量处理需求。第三,宏里操作行号的时候注意插入会让后面的行号整体下移,连续插入要么从下往上插,要么每次都基于同一个基准行加偏移,这个坑我踩过,插出来的顺序是反的。
宏还有个大用处是批量处理,比如给一批文件统一加编码声明、统一整理头文件顺序。这类操作手动做又慢又容易漏,写个宏循环跑一遍,几十个文件几秒钟搞定。当然,批量改代码之前一定先提交一版或者备份一份,宏写错了把文件改花的情况我见得太多了。
4.3 外部工具与版本管理的对接
Source Insight 4 本身不是编译器也不是版本管理客户端,但它可以调外部程序。设置好之后,你可以在编辑器里直接触发一次编译,或者把当前文件和仓库里的版本做一次对比。
外部比较工具的对接是我用得最多的。写完一段代码想确认自己到底改了哪些地方,把外部对比工具挂上去,一键调出来左右对照,比在文本编辑器里凭记忆找改动靠谱得多。配置的核心就是告诉 Source Insight 4 外部程序的路径,以及把两个待比较的文件路径作为参数传进去,参数的写法各工具不太一样,一般在工具的帮助文档里能查到。
版本管理这边,Source Insight 4 支持跟常见的版本管理客户端配合,能看到文件的修改状态标记。不过说实话,我更多还是用命令行或者独立的图形客户端做提交,编辑器这边只负责看状态,避免在编辑器里误操作提交了不该提交的文件。
5. 常见问题排查实录
前面讲的是"怎么配",这一节讲"配完了还是不对怎么办"。下面这几个问题是我在团队里被问得最多的,基本覆盖了九成以上的使用障碍。
5.1 跳转失效或者跳到错误位置
按重要性排,排查顺序是这样的:
第一,确认目标文件在项目里。跳不过去最常见的原因就是那个文件压根没被加入工程。去项目的文件添加/移除界面看一眼,如果文件列表里没有,加进去再同步一次。
第二,确认宏配置正确。如果目标代码被#if、#ifdef包着,而你少配了一个宏,那段代码在索引里就是"不存在"的。对照编译参数检查一遍。
第三,确认索引是最新的。刚拉了新代码、刚切了分支,索引还是旧的,跳过去当然看到旧内容。同步或者重建一次。
第四,同名符号的选择问题。工程里有两个同名函数,一个全局一个静态,或者两个不同模块各定义了一个同名的初始化函数,这时候点击可能跳到不是你想要的那个。这种情况用关系窗口或者符号列表,手动选具体是哪一个。
第五,解析规则问题。目标文件的扩展名没绑定到对应语言,里面全是纯文本,自然没有符号可跳。
我一般按这个顺序从下往上试,绝大多数问题在前两步就能解决。
5.2 中文注释乱码的快速定位
乱码排查的关键是先判断文件本身是什么编码,而不是急着改设置。判断方法很简单:用系统自带的记事本打开同一个文件,如果能正常显示,说明编码是当前系统默认的那一套;如果记事本也是乱的,那多半是 UTF-8 无 BOM 被当成别的编码了。
判断清楚之后再去 Source Insight 4 里改默认编码,改完重新打开文件。注意一点:改编码设置不会自动重新加载已打开的文件,必须关掉再打开,或者触发一次重新加载才会生效。很多人改完设置发现没变化,就是因为文件还开着旧的那一份。
如果整个工程要长期维护,我强烈建议统一编码,一次投入长期受益。方法不复杂,用系统自带的命令行工具或者常见的批量转换脚本都能做,转换脚本建议先在副本上跑一遍,确认没问题再动原文件。
5.3 高分屏上字体发虚、界面模糊
这是最常见的"看起来没坏但很难受"的问题。原因是软件对高分屏缩放的支持方式和系统设置不匹配,系统的缩放比例被软件忽略或者被拉伸处理了,结果就是字边缘模糊。
解决办法在操作系统的兼容性设置里:找到 Source Insight 4 的程序文件,打开属性,在兼容性那一页里有一个高分辨率缩放的设置,把缩放行为改成由应用程序自己处理,然后重启软件。改完之后界面会变小一些,但字体是清晰锐利的,再用前面说的方式把字号调到合适大小就行。顺序不能反:先让程序自己接管缩放,再调字号,反过来调完再改缩放,字号又要重新调一遍。
多屏办公的话还有个小坑:两台显示器缩放比例不一样(比如笔记本 150%、外接 100%),窗口拖来拖去的时候界面大小可能会跳变。这个属于系统级的问题,一般做法是把 Source Insight 4 固定在最常用的那块屏幕上用。
5.4 大工程卡顿的调优
几十万行的工程卡起来是很折磨人的。我的调优顺序一般是这样的:
首先瘦身索引。把中间产物目录、第三方库、测试数据全部排除,索引文件能小一大半,跳转和搜索速度立刻改观。这一步效果最明显,也最容易做。
其次关掉后台解析。让它在需要的时候同步,而不是边打字边在后台忙。
再次减少同时打开的窗口。关系窗口、上下文窗口这些实时跟着光标更新的窗口,大工程下会持续消耗资源,不用的时候关掉。
最后考虑磁盘。索引文件的读写很频繁,放在本地固态硬盘上跟放在机械盘或者网络盘上,速度差得非常明显。如果你的代码放在虚拟机共享目录或者网络映射盘里,把项目文件和索引放到本地,只把源码留在共享位置,体验会好很多。
6. 一套可以直接抄的配置清单
把前面说的东西压缩成一张表,新机器收拾的时候可以照着过一遍。
| 配置项 | 我的取值 | 说明 |
|---|---|---|
| 默认编码 | 按工程定,新工程 UTF-8 | 老工程切 GB 系,不混用 |
| 字体 | 中英文等宽字体 | 保证中文注释不乱行 |
| 字号 | 11 到 12pt | 配合系统缩放一起调 |
| 配色 | 低饱和浅色主题 | 宏定义单独醒目色 |
| 项目目录 | 与源码目录分开 | 避免污染版本管理仓库 |
| 索引范围 | 排除库、中间产物、文档 | 按需建全量工程 |
| 条件编译宏 | 与编译参数保持一致 | 解决整片代码变灰 |
| 缩进 | 跟随团队风格 | 制表符与空格不混用 |
| 行号 / 概览条 | 开 | 定位长文件的效率工具 |
| 后台解析 | 大工程关闭 | 换手动同步 |
| 高亮宏 | 最醒目的颜色 | 读嵌入式代码的关键 |
我个人的体会是,Source Insight 4 这类工具的价值不在功能多,而在于它对你的代码库理解得有多深。所有的配置项最终都指向同一件事:让它更准确地知道你的代码长什么样、你平时关心的是哪部分。宏配对了,跳转就准;索引瘦了,响应就快;字体选对了,看十个小时注释也不酸。这套东西配一次,能管很久。我现在的做法是把配置文件和个人键位表一起放在固定位置,换了新电脑,装上软件、导入配置、建好项目、跑一次全量重建,前后不超过半小时,剩下的时间就是老老实实读代码了。最后再分享一个小习惯:每隔一段时间把项目的符号索引重建一次,特别是大版本更新之后,很多"莫名其妙跳错位置"的问题,重建一遍就自己消失了。