Sublime Text 的核心概念是 scopes, 一个 scope 就是满足一个正则表达式匹配的文本区域. 语法定义文件 .sublime-syntax 会定义一组 scope 的正则表达式和名称. 一个 scope 名称和正则表达式一起组成了一条规则.
scope 本身不会产生任何作用. scope 可以嵌套进行细粒度的划分.
1. 安装 PackageDev: Ctrl + Shift + P Package Control: Install Package -> PackageDev
2. 新建一个纯文本文件, 然后打开点击菜单 Tools->Developer->New Syntax from Plain text.tmLanguage...
注意一定要打开一个没有语法的文本才会出现这个菜单.
3. 修改 name 和 file_extensions, 然后保存到 Packages/User/name.sublime-syntax. 打开控制台, 注意观察如下这类错误提示, 并对应修改
4. 当语法正确后就可以在 View->Syntax 列表中找到所定义的名字的项了.
语法定义文件的格式可参考:
1. http://www.sublimetext.com/docs/3/syntax.html
2. https://github.com/adintr/sublime_msil_syntax
3. http://docs.sublimetext.info/en/latest/extensibility/syntaxdefs.html
4. 在 Sublime Text 安装目录的 Packages 子目录下拷贝任意一个文件, 比如 SQL.sublime-package 出来, 改名为 SQL.zip, 解压, 找到里面的 SQL.sublime-syntax 打开进行参考.
这里给出一些简要说明:
match: 一个用于对文本区域进行匹配的正则表达式, 支持的语法参考 https://raw.githubusercontent.com/kkos/oniguruma/5.9.6/doc/RE
scope: 指定匹配区域的名称, 配色方案根据此名称来设置颜色, 参考 http://www.sublimetext.com/docs/3/scope_naming.html, 建议只使用 MINIMAL SCOPE COVERAGE 中列出的名称.
captures: 为正则表达式中的分组指定 scope name.
meta_scope: 设置当前区域的名称, 注意不是 match 匹配的区域.
meta_content_scope: 同上, 但是不包括开始和结束符号
meta_include_prototype:
push: 开始一个区域
pop: 结束当前区域
set: 等价于 pop 再 push
include: 嵌入指定的模板到当前位置