Textmate 语法高亮规则运行机制

浅析 Textmate 语法高亮规则运行机制

1. 语法高亮简介语法高亮是指在IDE或编辑器中,对文本进行分词,即将文本拆解为 Token(标记),每个 Token 都有对应的名称(作用域)进行标记。再配合主题样式规则,对不同名称的 Token 的进行主题化,以提高代码的可读性。 程序员离不开语法高亮,就像作家离不开标点符号一样。(你可以代入一下使用 txt 文本编辑器写代码的场景) 语法高亮由两个部分组成: 分词(Tokenization):将文本拆解为一系列 Token。 主题化(Theming):对 Token 进行样式渲染,如字体颜色、背景色、加粗等。 我们以 JSON 的语法为例,简单介绍一下语法高亮的过程。 首先分词引擎会对 JSON 文本进行分词,下图是将 JSON 文本进行分词后的结果,其中每个矩形所包括的文本都是一个 Token,每个 Token 都有一个作用域名称,例如 null 对应的是 constant.language.json 作用域。 然后主题化引擎会根据 Token 的作用域名称,对 Token 进行样式渲染,例如将 constant.language.json 作用域映射为蓝色不加粗字体。那么 null 就会被渲染为蓝色不加粗字体。 2. 分词的实现方式目前主流的分词实现方式大致有有以下三种: 基于正则表达式的分词:Textmate 基于词法分析的分词:Highlight.js 基于语法树的分词:Tree-sitter (如果有其他,欢迎补充) 本文只讨论 Textmate 的语法高亮规则编写。 Textmate 原是 MacOS 下的一款文本编辑器,其语法高亮规则是基于正则表达式的,但由于其规则简单易懂,且支持多种语言,因此被广泛应用于各种编辑器和IDE中,如 VSCode、Sublime Text 等。JetBrains 的 IDE 也集成了 Textmate Bundle 插件,可以直接导入 Textmate 的语法高亮规则。 ...

2025年07月20日 · 2 分钟 · Cassius0924

Windows VSCode 使用 JetBrians Mono 字体

本文主要介绍如何在 Windows 系统下的 Visual Studio Code 中使用 JetBrians Mono 字体。 下载字体可能你跟着网上很多教程一样,一上来就在 VS Code 中设置字体,结果发现设置不生效,这是因为你没有安装 JetBrians Mono 字体。 JetBrians Mono 字体下载地址:JetBrainsMono 安装字体下载字体后,解压缩,进入 ttf 文件夹,找到 JetBrainsMono-Regular.ttf 文件,双击打开,点击安装即可。当然你也可以全部字体都安装 :) 设置 VS Code打开 VS Code 的设置,搜索 editor.fontFamily,将其值设置为 JetBrains Mono,如下图所示: 重启 VS Code最后一步,重启 VS Code 即可。

2024年06月16日 · 1 分钟 · Cassius0924

Cassius0924 的 VSCode 插件

# .NET Install Tool for Extenstion ABC C/C++ C/C++ Extension Pack C/C++ Themes C# C# Dev Kit CMake CMake Language Support Cmake Tools Codelf Code Runner Code Snap Code Together Color Highlight Color Picker CSS Peek D Dev Containers Docker Doxygen Documentation Genertor EFG Git Graph git-commit-plugin GitHub Copilot GitHub Copilot Chat GitHub Copilot Labs GitHub Pull Resquest and Issues HI IntelliCode API Usage Examples IntelliCode for C# Dev Kit IntelliJ IDEA New UI Theme J Jetbrains Fleet Theme JetBrains Icon Theme JetBrains IDE Keymap KL Live Sever Live Share M Markdown Preview Github Styling Markdown Preview Mermaid Support Marp for VS Code MASM masm-code MASM/TASM Material Icon Theme mypy NOP Pylance Python QR Remote - SSH: Editing Configuration Files Remote - Development Remote Explorer REST API Ruff S Slidev T TODO Highlight v2 UV Vim VSCode DOSBox VSCode Git Commit Message W WSL XYZ Marp for VS Code

2024年06月16日 · 1 分钟 · Cassius0924

VS Code Clang 语法格式化配置

待优化! 基于 Visual Studio { IndentWidth: 4, IndentCaseLabels: true, ColumnLimit: 120, NamespaceIndentation: All, IndentAccessModifiers: false, AccessModifierOffset: -4, AlignTrailingComments: true, AlwaysBreakTemplateDeclarations: true } IndentWidth: 缩进4格

2024年06月16日 · 1 分钟 · Cassius0924

VS Code 设置网络代理指南

当你使用 VS Code 时,有时你可能需要配置网络代理来访问特定的网络资源(魔法)。 例如在局域网远程开发时使用 GitHub Copilot Chat 插件并且远程主机无魔法时就可以进行配置网络代理。 配置教程打开设置,搜索 proxy 找到 Http: Proxy,填入代理地址即可。 注意在远程开发时只能设置远程主机的Http代理,无法设置 VS Code 本机的网络代理。

2024年06月16日 · 1 分钟 · Cassius0924

解决VScode远程开发C++项目时无代码提示问题

简单粗暴,给本地主机和远程主机都安装上C/C++插件即可。

2024年06月16日 · 1 分钟 · Cassius0924