0

0

sublime怎么编写自定义语法高亮_从零开始创建sublime的.sublime-syntax文件

裘德小鎮的故事

裘德小鎮的故事

发布时间:2025-12-16 16:11:09

|

769人浏览过

|

来源于php中文网

原创

要让Sublime Text支持新语言,需创建YAML格式的.sublime-syntax文件,定义name、file_extensions、scope和contexts;通过正则匹配元素并分配作用域以实现高亮,如用match识别关键字、字符串和注释;使用push和pop管理上下文处理多行结构;保存至Packages目录后重启编辑器测试,通过Show Scope Name调试作用域命中情况,遵循source.lang等命名规范逐步构建完整语法系统。

sublime怎么编写自定义语法高亮_从零开始创建sublime的.sublime-syntax文件

想让 Sublime Text 支持一种新语言或自定义现有语言的语法高亮,你需要创建一个 .sublime-syntax 文件。这个文件使用 YAML 格式定义语法规则,告诉编辑器如何识别关键字、字符串、注释等元素,并为它们应用对应的颜色样式。

1. 准备工作:了解基本结构

每个 .sublime-syntax 文件都包含以下几个核心部分:

  • name:语法显示名称(如 "MyLang")
  • file_extensions:关联的文件扩展名(如 mylang, ml)
  • scope作用域名称,格式通常是 source.extname
  • contexts:定义匹配规则的上下文集合

示例骨架:

%YAML 1.2
---
name: My Language
file_extensions: [myl]
scope: source.myl

contexts: main:

  • match: 'your regex here' scope: keyword.control.myl

把这个内容保存为 MyLanguage.sublime-syntax,放在 Sublime 的 Packages 目录下(可通过菜单 Preferences → Browse Packages 打开)。

2. 编写匹配规则:使用正则和作用域

Sublime 使用正则表达式在文本中查找模式,并为匹配到的内容分配“作用域”(scope)。作用域决定了高亮颜色,比如:

  • keyword:关键字(if, for 等)
  • string:字符串
  • comment:注释
  • constant.numeric:数字
  • variable:变量名

例如,高亮以 # 开头的行作为注释:

  main:
    - match: '^#.*$'
      scope: comment.line.number-sign.myl

匹配双引号字符串:

    - match: '(")(.*?)(")'
      captures:
        1: punctuation.definition.string.begin.myl
        2: string.quoted.double.myl
        3: punctuation.definition.string.end.myl

3. 使用上下文管理状态

复杂语法需要“上下文”来处理嵌套或跨行结构。比如多行注释、字符串转义、嵌套块等。

你可以从一个上下文跳到另一个,并在结束时返回。

Frase
Frase

Frase是一款出色的长篇 AI 写作工具,快速创建seo优化的内容。

下载

示例:处理 C 风格的多行注释 /* ... */

  main:
    - match: '/\*'
      scope: punctuation.definition.comment.myl
      push: comment_block

comment_block:

  • match: '*/' scope: punctuation.definition.comment.myl pop: true
  • match: '.+' scope: comment.block.myl

这里用 push 进入 comment_block 上下文,直到遇到 */pop 返回主上下文。

4. 测试与调试

保存文件后重启 Sublime 或使用 View → Syntax → Open all with current extension as… → My Language 来应用语法。

如果高亮不生效:

  • 检查 YAML 缩进是否正确(必须用空格,不能用 Tab)
  • 确认文件放在正确的 Packages 目录
  • 打开 Sublime 控制台(Ctrl + `)查看是否有解析错误
  • Tools → Developer → Show Scope Name 查看光标处的实际作用域,验证是否命中

作用域命名建议遵循 Sublime 社区惯例,比如:

  • 语言级:source.myl
  • 关键字:keyword.control.myl
  • 函数调用:meta.function-call.myl

基本上就这些。从简单规则开始,逐步添加上下文支持,就能构建出完整的语法高亮系统。

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

510

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

248

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

742

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

213

2023.08.11

正则表达式空格
正则表达式空格

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

351

2023.08.31

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

234

2023.11.17

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

528

2023.12.06

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

0

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
AngularJS教程
AngularJS教程

共24课时 | 2.8万人学习

【李炎恢】ThinkPHP8.x 后端框架课程
【李炎恢】ThinkPHP8.x 后端框架课程

共50课时 | 4.5万人学习

Swoft2.x速学之http api篇课程
Swoft2.x速学之http api篇课程

共16课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号