Scintilla 编辑组件是什么?它和 SciTE 有什么区别、适合用来做什么?

更新时间

Scintilla 是一个免费的源代码编辑组件,不是独立编辑器。它提供完整源代码,许可证允许用于任何免费项目或商业产品,可嵌入到 Win32、GTK 和 macOS 应用中,为宿主程序提供文本编辑与源码编辑能力。如果你要自己做一个带代码编辑功能的软件,选它;如果你只想马上打开文件写代码、编译运行,直接用基于它构建的 SciTE 更省事。

Scintilla 提供哪些编辑能力

除了标准文本编辑组件的基础功能,Scintilla 针对源码编辑和调试做了扩展:

  • 语法样式:支持语法高亮,样式选择比许多编辑器更开放,允许比例字体、粗体、斜体、多种前景色和背景色以及多种字体。
  • 错误指示:可在编辑区标出错误位置。
  • 代码补全与调用提示:面向源码输入的辅助功能。
  • 选择边栏标记:边栏可放置类似调试器的标记,用于指示断点和当前行。
  • 词法分析交给 Lexilla:Lexilla 是可与 Scintilla 配合使用的词法分析器库,语法解析这部分由它承担。

一个值得注意的设计取舍:Scintilla 不把样式变更当作文档的持久修改。官方说明中提到,Richedit 等控件的最大问题是把样式变化写入撤销栈并设置文档脏标记;而对源代码来说,样式可以机械地重建,不应被持久化。这直接影响宿主应用的撤销行为和“文件是否已修改”的判断。

Scintilla 和 SciTE 是什么关系

两者是组件与应用的关系:

对比项 Scintilla SciTE
定位 可嵌入的源代码编辑组件 基于 Scintilla 的文本编辑器应用
使用方式 集成进你自己的程序 直接安装使用
起源 为改进 PythonWin 的编辑器而重写的新编辑控件 最初用于演示 Scintilla,后发展为通用编辑器
额外能力 编辑、样式、标记等组件能力 具备构建和运行程序的功能

SciTE 的名字来自 SCIntilla based Text Editor。官方对其适用范围的描述很明确:最适合配置简单的任务,作者本人用它构建测试和演示程序,也用它构建 SciTE 和 Scintilla 自身。

怎么选:嵌入组件还是直接用编辑器

  • 要把代码编辑能力做进自己的应用:选 Scintilla。你获得的是一个可编程的编辑控件,界面、菜单、文件管理都由你的程序决定。
  • 要一个能写代码、能构建运行的小型编辑器:选 SciTE。省去集成工作,但它的强项是简单配置的构建运行场景,不是大型项目 IDE。
  • 需要语法高亮但不想自己写词法规则:同时引入 Lexilla,与 Scintilla 搭配使用。

平台与版本条件

  • 支持平台:Intel Win32、macOS、带 GTK 的 Linux 兼容系统。官方记录中运行过的环境包括 Windows XP、Windows 7、macOS 10.9+ 以及使用 GTK 2 的 Ubuntu 18.04。
  • 当前版本:5.6.7,该版本减少了布局占用的内存。
  • 编译要求:当前 5.x 开发线需要支持 C++17 的较新 C++ 编译器。
  • 近期版本变化:5.6.6 修复多线程自动换行的缺陷;5.6.5 为 SCN_UPDATEUI 通知增加 SC_UPDATE_TEXT 和 SC_UPDATE_LINE_COUNT 标志;5.6.4 为 Qt 实现像素对齐的分数缩放;5.6.3 在额外视图上恢复撤销重做的选区与滚动位置。

上手入口

官网提供下载、文档、缺陷跟踪以及 Lexilla、SciTE、版本历史等页面。开始集成前,先确认你的工具链支持 C++17,再决定是否需要一并引入 Lexilla 处理词法分析;只想试用编辑体验的话,直接下载 SciTE 即可。