ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

SyntaxHighlightTools

更容易的语法高亮和主题定义。

详细信息

安装量

  • 总计 19K
  • Win 11K
  • Mac 5K
  • Linux 3K
8月6日 8月5日 8月4日 8月3日 8月2日 8月1日 7月31日 7月30日 7月29日 7月28日 7月27日 7月26日 7月25日 7月24日 7月23日 7月22日 7月21日 7月20日 7月19日 7月18日 7月17日 7月16日 7月15日 7月14日 7月13日 7月12日 7月11日 7月10日 7月9日 7月8日 7月7日 7月6日 7月5日 7月4日 7月3日 7月2日 7月1日 6月30日 6月29日 6月28日 6月27日 6月26日 6月25日 6月24日 6月23日
Windows 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Mac 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Linux 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

读我

源代码
bitbucket.​org

SyntaxHighlightTools

读取和写入XML很丑。JSON对人类来说更漂亮,但仍然有很多噪音,这会模糊意义。

因此有SyntaxHighlightTools,它提供了一种简单的语言来定义语法规则,还有一种简单的工具来定义颜色主题。

tmLang

用于定义语法高亮规则的编程语言。

创建新的tmLang文件

创建空的tmLang文件
运行命令面板并选择“SyntaxHighlightTools: 新建tmLang文件...”
从tmLanguage文件创建tmLang文件
  1. 打开tmLanguage文件
  2. 运行命令面板并选择“SyntaxHighlightTools: 新建tmLang文件...”

tmLang语言

最好看看:file:`tmLang.tmLang`的示例。你可以从:file:`tmLangTool.py`获取语法。

以下是tmLang语言的快速概述

tmLang文件有一个头部部分,其中你可以定义语言的通用设置和可以在之后的正则表达式中使用的令牌

name      : Name of language
scopeName : source.my-lang
uuid      : <uuid generated from :code:`import uuid ; uuid.uuid4()`>
fileTypes : <first-suffix suffix2 suffix3>

注意

文件类型中的 "<" 和 ">" 是语法的一部分,语法倾向于perl6语法的词表生成器。

继续使用一些令牌的示例

foo = some regex
bar = another regex using {foo}

如你所见,你可以在定义令牌后直接使用它。

最后,从MAIN部分(主要模式列表)开始你的规则库

MAIN
    constant.numeric.integer.my-lang
        \d+

    #
    # includes are done with #name, where name can be
    #   1) a name of a collection in your rule repository
    #   2) a scope name like #source.python
    #   3) #$self for self reference
    #
    example.for.pattern.with.begin.and.end.pattern
        \{
        \}

        #included

    # if you list your patterns between your begin and end pattern
    # applyPatternLast is implied
    example.for.applyPatternLast
        \[

        #source.regex

        another.pattern.spec.here
            (fo(o))bar

            2: foo.bar
            # names the captured "o"

        \]

    example.for.nesting

        (?x) \(

        \)

        #$self

    # use "[]" for specifying an empty pattern list
    example.for.applyPatternLast.with.empty.patterns
        <
        []
        >


    example.for.long.regex
        (?x) this
            regex is very long

included

    ...

Sublime Text 非官方文档 - 语法定义中,你可以找到一个使用PList格式的JSON翻译的示例。以下是tmLang版本的示例

name : Sublime Snippet (Raw)
scopeName : source.ssraw
fileTypes : <ssraw>
uuid      : ca03e751-04ef-4330-9a6b-9b99aae1c418

MAIN
    keyword.ssraw
        # Tab stops like $1, $2...
        \$(\d+)
        1: constant.numeric.ssraw

    keyword.ssraw
        # Variables like $PARAM1, $TM_SELECTION
        \$([A-Za-z][A-Za-z0-9_]+)
        1: constant.numeric.ssraw

    variable.complex.ssraw
        (\$)(\{)([0-9]+):

        1: keyword.ssraw
        3: constant.numeric.ssraw

        \}

        #$self

        string.ssraw
            .

    constant.character.escape.ssraw
        \\(\$|\>|\<)

    invalid.ssraw
        (\$|\>|\<)

如果你想要给语法添加特殊行为,你必须要添加 (*.tmPreferences) 和 <language name>.sublime-settings 文件。

语法特定的Sublime设置

你可以通过简单的添加任何设置

Settings::
    translate_tabs_to_spaces: true
    draw_white_space: all

请注意,尝试将值解释为JSON文本。如果不可行,则取走剥离后的字符串值。因此,上述代码会导致以下结果

{
    "translate_tabs_to_spaces": true,
    "draw_white_space": "all"
}

tmPreferences

注意!

使用以下内容将覆盖任何 已存在的带有相同名称的tmPreferences文件,以及如果使用设置定义则还会覆盖 <languagefile>.sublime-settings。

注意

没有任何删除未在tmlang文件中命名的现有文件。

每个tmPreferences定义必须包含作用域(scope)和uuid。

以下表格是从tmPreferences中提取的值。对于某些首选项,我无法确定它是通过Sublime Text评估的。

名称 类型
减少缩进模式 正则表达式
增加缩进模式 正则表达式
禁用下一行缩进模式 正则表达式
无缩进行模式 正则表达式
括号缩进下一行模式 正则表达式
取消完成 正则表达式
符号转换 替换程序
缩进方括号 正则表达式
缩进括号 布尔值
保留缩进 布尔值
显示在符号列表中 整数
禁用默认完成 整数
TM_* 字符串
完成 字符串列表
突出显示配对 字符串列表
智能打字配对 字符串列表

关于这些值的一些信息,您可以在以下资源中找到

以及当然,通过分析*.tmPreferences文件。

现在以下是一些示例。它们来自真实的tmPreferences文件。从tmLang.tmlang文件开始,已经有了一些证明过的例子。首先定义一个注释字符,例如Ctrl+/使用的

Comment::
    uuid  : e07f5996-cef4-4a7c-9d2c-64e85be714ef
    scope : source.tmlang
    TM_COMMENT_START: #

对于使用符号列表(Ctrl+r)进行导航,选择了两个作用域,进行了一些轻微的转换

Navigation - Pattern Sets::
    uuid: 62dfa0a4-51a9-4bc2-8cfc-adfea85d74e4
    scope: source.tmlang storage.type.class
    showInSymbolList: 1
    symbolTransformation:
        s/^/Pattern Set: /

Navigation - Scopes::
    uuid: 192ba968-fc92-433c-9a6a-7c4d521e486d
    scope: source.tmlang entity.name.function
    showInSymbolList: 1
    symbolTransformation: s/^/Scope: /

上面的三个例子创建了Comment.tmPreferences、Navigation - PatternSets.tmPreferences和Navigation - Scopes.tmPreferences文件。

也许最后一个(尚未证实)例子来自XML/Miscellaneous.tmPreferences

Miscelleneous::
    uuid: 95788610-7E2E-45CE-9CCE-708FE0C90BF7
    scope: text.xml
    comment:
       /* Don't indentation
        *  <?, </, <!
        * <whatever></whatever>
        * <whatever />
        * <% %>
        * <!-- -->
        * <%-- --%>
        *
        * Do indent:
        *  <whatever>
        *  <%
        *  <!--
        *  <%--
        *
        * Decrease indent for:
        *  </whatever>
        *  -->
        *  --%>
        */
    decreaseIndentPattern: ^\s*(</[^>]+>|-->|--%>)
    highlightPairs:
        ( ) [ ] { } "\"" "\"" < >
    increaseIndentPattern:
        ^\s*<(([^!/?]|%)(?!.+?([/%]>|</.+?>))|[%!]--\s*$)

请注意highlightPairs。它是一个字符串列表,可以是不带引号的,也可以是带双引号的。这就是为什么双引号必须转义和引号。highlightPairs和smartTypingPairs都必须是元素数量相等的列表,因为它们是自动配对的。

在创建tmPreferences文件的过程中,并非所有内容都经过适当的测试,因此我非常欢迎反馈

扩展变量

tmTh

如果您尝试创建一个新的颜色方案,您很快就会发现不知道要为主题哪些作用域名称,因此您必须在其他.thTheme文件中查找,这会非常耗时。

另一件事是,除了在http://manual.macromates.com/en/language_grammars.html之外,没有关于作用域名称的真实规范。

创建新的tmTh文件

  1. 创建一个新的空白窗口
  2. 打开您想为它们创建颜色方案(或为覆盖所有语言文件而留空)的tmLanguage文件
  3. 打开您想使用作为颜色默认值的tmTheme文件
  4. 从构建系统中选择"generate_tmTh",转到tmLanguage或tmTheme文件之一,然后按F7运行构建系统。
  5. 一个新的视图出现了,包含.tmth文件。将此文件保存为您的颜色方案名称。
  6. 将构建系统切换回"自动"。

按F7从tmth文件生成您的tmTheme文件。

陷阱

  • 确保您使用一种单一种的缩进样式。空格和制表符之间没有任何区别,这可能导致奇怪的错误。

更改

2014-09-13
  • 您现在可以为类似以下规则的规则指定名称和内容名称

    meta.restructuredtext.link-explicit <string.other.ref.restructuredtext>
        # here come the rule
    
2014-01-31
  • 增强tmLang2tmLanguage中错误显示
  • 在构建系统中添加file_regex,以便您可以跳转到错误的位置
2014-01-16
  • 添加tmPreferences定义
  • 改进了符号列表以便导航
  • 添加了完成功能,使它们更加上下文敏感,这样完成列表就不会出现溢出
  • 添加了uuid完成功能,它可以始终创建一个新的uuid。
  • 默认情况下设置空白为空格

作者

凯乌韦(Kiwi)洛伦茨 <[email protected]> (http://quelltexter.org)

请支持我在Sublime Text 插件上的工作: 通过Paypal捐赠