Sublime Text 3中的自定义语法突出显示 - 无法转换

时间:2015-06-26 13:50:18

标签: syntax-highlighting sublimetext3

我正在尝试为Sublime Text 3创建自己的语法高亮。它的主要目的是区分用拉丁文脚本编写的文本和用西里尔文脚本编写的文本。我已经安装了AAAPackageControl并阅读tutorial,但由于某些原因我无法使其工作。

这是我写的语法

# [PackageDev] target_format: plist, ext: tmLanguage
---
name: ADVANCED TEXT
scopeName: text.mirkowy
fileTypes: []
uuid: 78dbe755-58eb-4cdf-b954-4438334aedb9

patterns:
- comment: Words in Latin Script
  name: latin_text.text.mirkowy
  match: [A-Za-z]+
- comment: Words in Cyrillic Script
  name: cyrillic_text.text.mirkowy
  match: [ЁЂЃЄЅІЇЈЉЊЋЌЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяёђѓєѕіїјљњћќўџҐґ]+
- comment: Numbers
  name: numbers.text.mirkowy
  match: \d
...

然而,当我按F7将该文件转换为plist时,我不断收到错误并且我不明白为什么(请记住,我对创建自己的语法并不是全新的喜欢) - 这是它的样子:

Input type not specified, auto-detecting... YAML
No target format specified, searching in file... Property List
Parsing YAML... (C:\Users\iyoossaev\AppData\Roaming\Sublime Text 3\Packages\User\mirkowy.YAML-tmLanguage)
Error parsing YAML: while parsing a block mapping

我做错了什么?

1 个答案:

答案 0 :(得分:0)

你几乎得到了它,但你的正则表达式存在一个小问题 - 用方括号[ ]包围的字符类需要在括号( )内。你的“数字”正则表达式\d在没有parens的情况下正常工作。因此,只需将代码更改为以下内容:

# [PackageDev] target_format: plist, ext: tmLanguage
---
name: ADVANCED TEXT
scopeName: text.mirkowy
fileTypes: []
uuid: 78dbe755-58eb-4cdf-b954-4438334aedb9

patterns:
- comment: Words in Latin Script
  name: latin_text.text.mirkowy
  match: ([A-Za-z]+)

- comment: Words in Cyrillic Script
  name: cyrillic_text.text.mirkowy
  match: ([ЁЂЃЄЅІЇЈЉЊЋЌЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяёђѓєѕіїјљњћќўџҐґ]+)

- comment: Numbers
  name: numbers.text.mirkowy
  match: \d

你应该全力以赴。请注意,我在每个块之间放置了一个空格 - 这不是必需的,但它可以帮助您在视觉上分隔每个块,这在您获得非常复杂的块时非常有用。

如果您想要一些更复杂的.YAML-tmLanguage语法定义的示例,请立即考虑两个地方。第一个是PackageDev包中的Syntax Definitions文件夹。第二个实际上是我的个人项目,Python Improved语法定义,旨在更好地替代Sublime附带的内置Python语法。您可以在Github上找到PythonImproved.YAML-tmLanguage的来源。如果您对语法设计有任何疑问,请随意在那里打开issue,或者在此处提出新问题。

祝你好运!