是否可以共享 SublimeText 首选项*和*覆盖一个特定的首选项?

Is it possible to share SublimeText preferences *and* override one specific pref?

我使用 Git 在两台机器(家庭、工作)之间共享 Sublime 首选项。

我工作时的显示器比家里的显示器有更高的 DPI,所以我想在两台机器中的一台上覆盖 font_size

我希望:

,但我认为这些在 Sublime 中都不存在。特定于语言的配置不是我要找的,我想要全局的东西,但只在两台机器中的一台上。

想法?解决方法?谢谢。

设置文件的一般机制是,当 Sublime 按名称加载 sublime-settings 文件时,它会从所有已知包中提取所有名称相似的文件并将它们组合在一起(同样许多其他资源文件都会发生这种情况),后面文件中的内容会覆盖前面文件中出现的任何内容。

这里的 order that's imposed 是词法包,Default 总是第一个,User 总是最后一个。这就是默认设置位于 Default 包中而您的自定义设置位于 User 包中的原因。此外,特定于语法的设置也适用(特定于项目的设置也是如此)。

除了这种机制之外,如果您不进行某种手动干预,就没有直接的方法来覆盖设置。此类问题的潜在解决方案包括以下示例:

不同步 Preferences.sublime-settings 文件

如果文件没有在多台机器上同步,那么这个问题就没有实际意义了,因为每台机器都可以很容易地拥有自己独特的设置。这样做的缺点是每台机器都有自己独特的设置,如果您经常从一台机器换到另一台机器并且工作方式不完全相同,这将是一件很痛苦的事情。

使用单独的 git 个分支

如果您正在使用 git,这里的替代方法是尝试为每个主机或每个主机类型保留单独的分支(例如 hi_dpireg_dpi 或某些这样的)。然后在每台机器上检查相应的分支。

这里明显的缺点是必须在分支之间尝试 cross-sync 所需的设置更改(对于 User 以及您可能安装的任何软件包),这不太理想,除非您真的爱git.

使用额外的 Preferences.sublime-settings 个文件

这里的想法是您根本不在 User/Preferences.sublime-settings 文件中包含 font_size 设置。相反,您使用命令面板中的 Browse Packages 打开 Packages 文件夹,然后在那里创建一个任意名称的新文件夹。该文件夹内包含一个 Preferences.sublime-settings 文件,该文件仅包含 font_size 设置。

在多台机器上执行此操作,您可以跨机器同步 User 文件夹中的设置,而无需同步包含 font_size 的首选项。请注意,如果您在 Sublime 已经 运行 时创建文件,您可能需要退出并重新启动才能注意到设置文件存在;不过这只适用一次。

使用插件

看看上面提供的 link,任何设置的最终王牌是直接应用于 view 的设置。鉴于此,您可以使用一个插件,该插件始终有选择地将特定字体大小应用于任何新创建或打开的文件:

import sublime
import sublime_plugin

import socket


class CustomFontListener(sublime_plugin.EventListener):
    hostname = socket.gethostname()

    def on_new(self, view):
        if self.hostname in ("host1", "host1.example.com", "host2"):
            view.settings().set("font_size", 20)

    on_load = on_new

现在,无论何时打开文件或创建新缓冲区,如果当前主机名在您配置的列表中,视图将立即得到适当的 font_size 应用;否则将使用首选项中的那个。

您还可以将其扩展为可通过其自己的设置文件进行配置,根据主机名应用不同的字体大小等。

视图中的设置保留在 sublime-session 文件以及与 sublime-project 文件关联的工作区文件中,因此即使重新启动,这些设置也将保持不变。


需要记住的一点是,用于更改字体大小的内部命令(通过 Preferences > Font 或通过鼠标滚轮键盘快捷键)通过将新的 font_size 写入您的用户首选项来工作。

如果您使用单独的首选项文件,那么这样做会将 font_size 添加到您的 User 设置中,您需要手动将其删除并修改其他设置文件。

如果您使用的是该插件,那么这些快捷方式似乎不会执行任何操作,因为它应用了覆盖 User 首选项的 font_size,但实际上如上所述您的首选项文件最终被更改,您可能不会立即注意到。

因此,无论您选择哪种方式,如果您倾向于使用这些设置,您可能需要在事后对设置文件进行手动调整。如果这是经常发生的事情,也可以创建这些命令的更智能版本。