启动时自动加载 Sublime 工作空间

Automatically loading a Sublime workspace on startup

我在这里发布了一个问题:

这太棒了,而且效果很好!但还有最后一件事我想不通。如何设置它以便 Sublime 在打开时自动加载保存的工作区?因为我在边栏中有我的宏文件夹,但每次启动 Sublime 时我都希望它自动存在,所以我添加了该文件夹并保存了工作区,但是当我关闭 Sublime 时,该文件夹消失了,我必须转到 project->open-recent ->我的工作空间

有没有办法在启动 Sublime 时自动加载工作区或在启动 Sublime 时自动向项目添加文件夹?

如果在边栏中打开了相应的文件夹并且您打开了 hot_exit 设置(默认情况下),那么退出 Sublime 并重新启动它应该会保留该文件夹,并且相同如果个人 windows 引用的是项目或工作区,则应该如此。

运行 关闭最后一个 window 与退出 Sublime 不同的区别并不少见,具体取决于您所在的平台,这可能会导致 Sublime在 session 中记录退出时没有 windows 打开。

然而,根据对您问题的评论,这听起来更像是这实际上不是您的问题,您更希望有一种方法可以将一个或多个特定文件夹添加到新创建的 windows 和项目中相反,这样您的宏文件夹就始终可用。

这可以通过一个插件来实现,它可以根据需要调整特定 window 中的文件夹。这可以 semi-mostly 自动化(更多内容见下文)。这是我们为此需要的插件:

import sublime
import sublime_plugin


class AddAdditionalFoldersCommand(sublime_plugin.WindowCommand):
    """
    Adds all of the folders from the `additional_folders` setting in the user
    preferences to the current window, if they are not already present there.
    """
    def run(self):
        # Get the list of folders from the settings
        settings = sublime.load_settings("Preferences.sublime-settings")
        additional = settings.get("additional_folders", [])

        # Get the project data and associated folders from the current window,
        # with sensible defaults if the window has no project data yet
        project_data = self.window.project_data() or {}
        project_folders = project_data.get("folders", [])

        # Add in any additional folders that are not already present
        for folder in additional:
            if not any(o["path"] == folder for o in project_folders):
                project_folders.append({"path": folder})

        # Update project data
        project_data["folders"] = project_folders
        self.window.set_project_data(project_data)


class AdditionalFolderListener(sublime_plugin.EventListener):
    """
    Listens to see if a new window has been created, and if so add additional
    folders if desired.
    """
    def on_post_window_command(self, window, command_name, args):
        if command_name == "new_window":
            settings = sublime.load_settings("Preferences.sublime-settings")
            if settings.get("auto_add_additional_folders", False):
                window = sublime.active_window()
                window.run_command("add_additional_folders")

要使用它,您还需要在 Preferences.sublime-settings 文件中添加一些设置(根据需要更改值):

    // When true, the folders in "additional_folders" will be
    // automatically added when a new window is created.
    "auto_add_additional_folders": true,

    // Additional folders to add; these must be absolute paths
    "additional_folders": [
        "/home/odatnurd/.config/sublime-text-3/Packages/User/macros"
    ],

这有两件事:

  1. 当您 运行 add_additional_folders 命令时,additional_folders 设置中配置的列表中的所有文件夹都将添加到当前 window 只要它们不存在(否则同一个文件夹会出现不止一次)。

  2. 创建新的window时,如果auto_add_additional_folders设置为true(代码中为了安全默认为false) , 然后命令将自动执行新的 window.

循环回到上面的 post,其中的 "semi-mostly automated" 部分是因为为了工作,必须调用 new_window 命令以使事件处理程序能够知道创建了一个新的 window。

如果您使用菜单项或键绑定创建新的 window,则会出现这种情况,但如果您打开现有项目或工作区,则不会执行该命令。也可以在不使用此命令的情况下创建 windows,例如,如果您退出没有 windows 的 Sublime,它会默认创建一个新的,或者在没有 [=71= 的 MacOS 上] 然后单击停靠栏图标。

因此,根据您使用 Sublime 的方式,您可能希望将 add_additional_folders 绑定到一个键,以便您可以根据需要手动调用它。您还可以在 User 包中创建一个名为 AdditionalFolders.sublime-commands 的文件,其中包含以下内容,以将命令添加到命令面板。您可以调整标题以适应;只要扩展名正确,文件名也不重要。

[
    { "caption": "Add Additional Folders", "command": "add_additional_folders" },
]

最后的注释:

  1. 尽管此处使用了 API 的名称,但它在所有 windows 中都有效,即使他们没有与之关联的项目(或者他们只有一个与它们关联的工作区)因为所有 windows 本身都带有项目数据

  2. 有人暗示,下一版本的 Sublime 将有额外的事件,可以更容易地检测新的 windows。以上涵盖了 build 3211;如果您正在阅读本文并且有可用的更新版本,则上述内容可能会变得更智能。