我正在忙着制作一个崇高的文本插件/包,这将简化我工作场所中lua脚本的开发。
根据目的,我们有几个不同扩展名的lua文件。我希望ST3为这些文件提供正确的lua语法。
我知道您可以将ST3设置为记住特定文件扩展名的语法,并将其保存为Lua.sublime-settings
AppData\Roaming\Sublime Text 3\Packages\User
文件
但是,如果我将此文件放在我的新插件的文件夹中,则会被忽略。
我做错了什么或是我想要的不可能?
答案 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
文件中都不会出于同样的原因,这可能是也可能不是问题。