使用.tmLanguagesyntax definitions 执行语法高亮显示。它们被格式化为 Apple 基于 XML 的 PLIST 格式,尽管由于出色的 Sublime 插件PackageDev 它们可以用 JSON 或 YAML 编写,我选择它是因为它的紧凑性,而且我使用它可以获得甜美的语法突出显示我的主题*.
因此,您的语法非常简单。您将拥有三个规则:
- 以单个制表符开头的匹配行作为“标题”行
- 以两个制表符开头的匹配行作为“字幕”行
- 匹配以三个制表符开头的行作为“注释”行。
Sublime 将以纯文本形式显示其他所有内容。
在这里,在 YAML 中:
# [PackageDev] target_format: plist, ext: tmLanguage
---
name: Reminders
comment: Written for http://stackoverflow.com/q/25689365/1426065 by @MattDMo
scopeName: text.reminders
fileTypes: [todo]
uuid: 6B548E74-5E01-497A-B030-9D31131B7A70
patterns:
- name: text.title.reminders
match: ^\t(?!\t+)(.*)
- name: text.subtitle.reminders
match: ^\t\t(?!\t+)(.*)
- name: text.comment.reminders
match: ^\t\t\t(.*)
一切都很简单。这个名字是出现在 Sublime 右下角的,它是我写的,它的基本作用域名称是text.reminders,打开一个带有.todo 扩展名的文件会自动应用这个语法,而 UUID 只是一个唯一标识符。正如我上面提到的,有三种模式。需要记住的一件事:仅当行以文字制表符开头时才匹配,而不是作为制表符插入的空格字符!这意味着您需要选择
View -> Indentation 并确保 Indent Using Spaces 被未选中。为了更好地衡量,也请选择 View -> Indentation -> Convert Indentation to Tabs。这些设置可以仅应用于“提醒”视图,我稍后会介绍。
所以我们有我们的 YAML,如果你没有 PackageDev,它就毫无用处。但是,翻译成 PLIST 效果会更好:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>comment</key>
<string>Written for http://stackoverflow.com/q/25689365/1426065 by @MattDMo</string>
<key>fileTypes</key>
<array>
<string>todo</string>
</array>
<key>name</key>
<string>Reminders</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>^\t(?!\t+)(.*)</string>
<key>name</key>
<string>text.title.reminders</string>
</dict>
<dict>
<key>match</key>
<string>^\t\t(?!\t+)(.*)</string>
<key>name</key>
<string>text.subtitle.reminders</string>
</dict>
<dict>
<key>match</key>
<string>^\t\t\t(.*)</string>
<key>name</key>
<string>text.comment.reminders</string>
</dict>
</array>
<key>scopeName</key>
<string>text.reminders</string>
<key>uuid</key>
<string>6B548E74-5E01-497A-B030-9D31131B7A70</string>
</dict>
</plist>
在 Sublime 中,使用 XML 语法创建一个新文件,并将上述 XML 复制到其中。通过选择 Preferences -> Browse Packages... 找到您的Packages 目录,然后将这个新文件保存为Packages/User/Reminders.tmLanguage(确保tmLanguage 中的L 大写)。现在在 Sublime 右下角的语言列表中应该有一个“用户 -> 提醒”选项,或者通过 View -> Syntax 菜单选项。
但是,还有一件事要做 - 上色。为此,您需要修改 .tmTheme 配色方案文件。由于您使用的是 Sublime Text 2(我假设),这很容易。打开Preferences -> Settings-User,查看"color_scheme"的值。通过选择 File -> Open... 打开配色方案文件,导航到您之前使用 Preferences -> Browse Packages... 找到的 Packages 目录,然后在它所在的任何子目录中打开该文件。例如,如果您的设置文件显示"color_scheme": "Packages/Color Scheme - Default/Monokai.tmTheme",您将导航到打开文件对话框中的Packages/Color Scheme - Default 目录并打开Monokai.tmTheme。超级简单。
现在您已经打开了配色方案文件,您可以根据需要将语法设置为 XML,然后一直向下滚动到底部。你会想要插入你的新颜色(我会在一分钟内完成)在上面写着:
</array>
<key>uuid</key>
<string>06CD1FB2-A00A-4F8C-97B2-60E131912345</string>
</dict>
</plist>
UUID 甚至可能不存在,它可能只是说:
</array>
</dict>
</plist>
无论如何,应该始终是文件中的最后一行,否则会中断。无论如何,在这些行之上,插入以下字典:
<dict>
<key>name</key>
<string>Reminders - Title</string>
<key>scope</key>
<string>text.reminders text.title.reminders</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold italic</string>
<key>foreground</key>
<string>#00FF00</string>
<key>background</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Reminders - Subtitle</string>
<key>scope</key>
<string>text.reminders text.subtitle.reminders</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FF0080</string>
<key>background</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Reminders - Comment</string>
<key>scope</key>
<string>text.reminders text.comment.reminders</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string></string>
<key>background</key>
<string></string>
</dict>
</dict>
随意自定义foreground 和background 颜色和fontStyle 属性(“bold”和“italic”是唯一有效的值)随你喜欢。
如果您还记得的话,还有一件事 - 将 Sublime 设置为仅在 提醒 视图中使用选项卡。使用 JSON 语法创建一个新文件,或者如果您安装了 PackageDev,则使用“Sublime Settings”语法。添加以下内容:
{
"translate_tabs_to_spaces": false,
"extensions":
[
"todo"
]
}
(是的,我知道“todo”已经在语言定义中,我只是为了安全起见)。您可以在此处添加 Preferences -> Settings-Default 和 ... -> Settings-User 文件中使用的任何其他选项,只需确保该文件是有效的 JSON。将文件另存为Packages/User/Reminders.sublime-settings。
就是这样!您可能需要重新启动 Sublime 才能使更改生效,但随后一切就绪。回顾一下,创建新语法定义的步骤如下:
- 联系
PackageDev,你的生活会轻松很多。
- 使用 Oniguruma 正则表达式语言以 JSON 或 YAML 格式编写突出显示正则表达式,使用 Rubular 等工具在线测试(使用 Ruby 1.9.2 选项)。
- 编译为 PLIST/XML。
- 修改新范围的配色方案。
- 为制表符等特定语法设置创建一个
.sublime-settings 文件。
- ???
- 利润!
* 如果您有兴趣,请在我的用户资料中链接...