使用包发送默认的 sublime-settings

Ship default sublime-settings with package

在我的 SublimeText 包中,我包含一个文件 BlameHighlight.sublime-settings。测试的时候,我从~/Library/Application\ Support/Sublime\ Text\ 3/Packageslink到这个目录,修改这个文件就生效了。

我还包含一个指向 ${packages}/User/BlameHighlight.sublime-settings 的菜单项。当我使用菜单时,我看到一个完全空白的文件。

如何使用我的 BlameHighlight.sublime-settings 版本作为 ${packages}/User/BlameHighlight.sublime-settings 的默认模板?

通常,您的 Main.sublime-menu 将包含默认 .sublime-settings 文件(可能 Packages/BlameHighlight/BlameHighlight.sublime-settings)和 Packages/User 版本的条目。如果用户想要自定义设置,他们首先打开默认文件(在 ST3 中是只读的),然后是用户文件,并将他们需要的内容从默认文件复制粘贴到用户。

如果出于某种原因您希望用户文件预先填充一些设置,您需要以编程方式创建它。

我建议使用与所有其他包相同的策略,而不是自动创建默认设置文件的副本。不是因为我认为它更好,而是因为我认为不同包之间的用户体验应该没有差异。

然而,正如 所述,您必须为此编写我们自己的插件。至少对于 ST3,这是非常简单的:

import os, sublime_plugin, sublime

class CopyUserSettingsCommand(sublime_plugin.WindowCommand):
    def run(self, package_name, settings_name):
        file_path = os.path.join(sublime.packages_path(), "User", settings_name)
        if not os.path.exists(file_path):
            try:
                content = sublime.load_resource("Packages/{0}/{1}".format(package_name, settings_name))
                with open(file_path, "w") as f:
                    f.write(content)
            except:
                print("Error copying default settings.")
        self.window.open_file(file_path)

只需将其复制到包中的 python 文件中,然后插入菜单项:

// ...
{
    "command": "copy_user_settings",
    "args": {
        "package_name": "BlameHighlight",
        "settings_name": "BlameHighlight.sublime-settings"
    },
    "caption": "Settings – User"
},
// ...