Sublime Text 3 - 在package / plugin中设置filetype的语法

时间:2018-01-17 14:23:34

标签: lua sublimetext3 sublimetext sublime-text-plugin

我正在忙着制作一个崇高的文本插件/包,这将简化我工作场所中lua脚本的开发。

根据目的,我们有几个不同扩展名的lua文件。我希望ST3为这些文件提供正确的lua语法。

我知道您可以将ST3设置为记住特定文件扩展名的语法,并将其保存为Lua.sublime-settings

中的(在我的情况下)AppData\Roaming\Sublime Text 3\Packages\User文件

但是,如果我将此文件放在我的新插件的文件夹中,则会被忽略。

我做错了什么或是我想要的不可能?

1 个答案:

答案 0 :(得分:0)

这不起作用,因为语法特定设置仅从定义语法的包和User包中加载(因此用户可以自定义它们)。

以下是official documentation on settings

的引用
Settings files are consulted in this order:

1. Packages/Default/Preferences.sublime-settings
2. Packages/Default/Preferences (<platform>).sublime-settings
3. Packages/User/Preferences.sublime-settings
4. <Project Settings>
5. Packages/<syntax>/<syntax>.sublime-settings
6. Packages/User/<syntax>.sublime-settings
7. <Buffer Specific Settings>

引用<syntax>的唯一地方来自包本身和用户包。

如果我不得不猜测,我会说这是因为在定义语法的原始包作者之外,所有其他设置都将被视为用户自定义,并且这些设置需要在User包中(特别是在它的根目录中)以确保它们最后加载。

一个简单(但不合需要)的解决方案是为用户记录他们必须手动执行此步骤。

另一种方法是添加一些插件代码,在插件加载时扩展设置:

def plugin_loaded():
    settings = sublime.load_settings("Lua.sublime-settings")
    extensions = settings.get("extensions", [])

    if "blarb" not in extensions:
        extensions.append("blarb")
        settings.set("extensions", extensions)
        sublime.save_settings("Lua.sublime-settings")

如果你走这条路线,你可能想要在某个地方(在特定于你的包或某些设置的设置中)包含一个额外的哨兵设置,如果你这样做或不这样做,而不是像上面的例子那样强制设置。

在实践中,您将检查是否已设置该哨兵而不是强制扩展,以便如果用户决定对您的文件使用其他语法,则不会强制它们进入{{1语法。

也可以定义自己的语法,只需嵌入标准的Lua语法,这样就可以使用Just Work™而无需编写任何代码或让用户做任何事情:

Lua

执行此操作时,文件中的范围仍为%YAML 1.2 --- name: Blarb scope: source.lua file_extensions: - blarb contexts: main: - include: scope:source.lua ,因为这是语法文件中source.lua所说的内容。状态行将语法名称设置为scope。如果需要,您可以修改其中任何一个以更改顶级范围或显示的名称。

示例是将范围更改为Blarb,以便您可以创建仅适用于特定变体的source.blarb个文件的密钥绑定/代码段。

这有一个潜在的缺点/特征是,由于语法特定设置的名称来自提供语法的文件的名称,如果用户具有任何Lua特定设置,则它们将不适用默认情况下,您的Lua文件。

同样,通过检查Blarb范围而对Lua特定的任何内容在source.lua文件中都不会出于同样的原因,这可能是也可能不是问题。