在sublime文本中创建一种新语言

时间:2014-06-17 18:33:55

标签: sublimetext textmate sublimetext3

我们的实验室中有一种新语言,我们在emacs中提供了语法高亮等功能,但目前没有任何用于崇高文本的内容。

我不想为这种语言创建语法高亮,但我想要以下内容:

  1. 语言类似于Haskell ---因此它基本上读取Haskell语法高亮(但是它错了,不是一个问题)。这可以通过在Haskell.sublime-settings中为这种新语言设置扩展名来完成。但是 - >
  2. 我需要这种新语言将tab_size设置为4,而对于Haskell,它是2。
  3. 我不确定如何在Sublime Text 3中完成此任务。

1 个答案:

答案 0 :(得分:1)

如果您的语法构建或扩展Haskell,我首先要导入Haskell语法规则

<?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>fileTypes</key>
    <array>
        <string>my-extension</string>
    </array>
    <key>name</key>
    <string>My Language</string>
    <key>patterns</key>
    <array>
        <dict>
            <key>include</key>
            <string>source.haskell</string>
        </dict>
        <!-- custom syntax here -->
    </array>
    <key>scopeName</key>
    <string>source.haskell.myExt</string>
    <key>uuid</key>
    <string></string>
</dict>
</plist>

然后,您可以开始添加自定义语法或覆盖Haswell默认值,例如

<dict>
    <key>match</key>
    <string>(\b|^\s*)(?i)(list|of|my|keywords)\b</string>
    <key>name</key>
    <string>keyword.command.myExt</string>
</dict>

<dict>
    <key>match</key>
    <string>\b(true|on)\b</string>
    <key>name</key>
    <string>constant.boolean.true.myExt</string>
</dict>

<dict>
    <key>match</key>
    <string>\b(false|off)\b</string>
    <key>name</key>
    <string>constant.boolean.false.myExt</string>
</dict>

<dict>
    <key>match</key>
    <string>\b((0(x|X)[0-9a-fA-F]+)|([0-9]+(\.[0-9]+)?))\b</string>
    <key>name</key>
    <string>constants.nummeric.myExt</string>
</dict>

我建议您在创建自定义之前先查看Haskell.tmLanguage,然后查看其结构和命名方案。

我不确定tab-size是否是你在语言定义中定义的。我可以想象你可以在语法设置中控制它,尽管这些也可能适用于导入的Haskell。

{
    "tab_size": 4,
    "translate_tabs_to_spaces": false
}

另请允许我指出,在标记此问题textmate时,您可能会得到更好的响应,因为Sublime Text使用TextMate的.tmLanguage文件作为语法定义。