我们的实验室有一种新的语言,我们有一些东西可以在emacs中提供语法高亮等功能,但目前还没有sublime text。
我不想为这种语言创建语法高亮显示,但我想要以下东西:
- 该语言类似于Haskell——所以它基本上读取Haskell语法高亮显示(无论错误与否,还不是一个问题)。这可以通过在Haskell.sublime-settings中为这种新语言设置扩展名来实现。但是——>
- 我需要这个新语言有tab_size设置为4,而Haskell,它是2。
我不确定如何在Sublime Text 3中实现这一点。
如果你的语法建立在Haskell之上或扩展了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
,看看它的结构和命名方案。
我不确定制表符大小是否是你在语言定义中定义的。我可以想象您可以在语法设置中控制这一点,尽管这些也可能适用于导入的Haskell。
{
"tab_size": 4,
"translate_tabs_to_spaces": false
}
还让我指出,当标记这个问题textmate
时,您可能会得到更好的响应,因为Sublime Text使用TextMate的.tmLanguage
文件作为语法定义。