是否已将 .sublime-build 配置文件打包到另一个文件/包中
从技术上讲,您的问题的答案是否定的;该Python.sublime-build文件仍然与以前相同Python.sublime-package,但与 ST2 不同的是,ST3sublime-package无需先提取文件即可读取文件内容。
sublime-package在 ST2 中,Sublime 每次启动时都会执行一个名为“Package Setup”的步骤,从而将文件的内容提取到Packages文件夹中(当包文件已更改或文件夹版本不存在时)。如果您检查 ST2 控制台的顶部,您可以看到有关它是否认为需要进行设置的消息。
在 ST3 中,Sublime 可以直接从文件中读取包资源sublime-package,因此它不再执行以前的包提取步骤。
因此,虽然在 ST2 中您可以转到Packages文件夹查看包的内容,但现在您需要sublime-package自己查看文件内部(它只是一个具有不同扩展名的 zip 文件)或使用View Package File命令面板中的命令,这将允许您查看和打开任何包中的任何包资源。
为什么,因为它使编辑变得不那么方便了?
此更改的主要原因之一是使编辑包资源更安全。以前,如果您要编辑一个包的提取内容,如果该包得到更新,Sublime 会重新提取新的包文件,这可能会破坏您的更改。
为了允许包更新而不发生这种情况,ST3 支持overrides包和资源的想法;本质上是你提供一个外部文件并告诉 Sublime “使用这个文件而不是那个文件”的想法;这样,即使sublime-package文件发生更改,您的更改也会保持不变。
这可以通过两种不同的方式发生:
如果您将sublime-package文件放在文件夹中,并且在 Sublime 安装目录的文件夹中Installed Packages出现类似名称的包,则使用其中的版本,而忽略 Sublime 附带的版本。这允许您替换 Sublime 附带的软件包。PackagesInstalled Packages
如果您的用户配置区域Packages的文件夹中有一个模仿文件名的文件夹(例如和),则该文件夹的内容被认为是文件的一部分,允许您扩充包。sublime-packagePython.sublime-packagePython/sublime-package
此外,如果文件夹版本中出现任何具有相同名称和相对路径的文件,它们将被用来代替文件中的sublime-package文件(文件名和路径的大小写在某些情况下可能很重要,因此最好模仿它正是)。这允许您安全地修改包的内容。
在这两种情况下,您都可以根据自己的喜好自由修改软件包,同时确保无论发生什么更新,您的更改都将保持不变。因此,重要的是要注意您永远不应该修改sublime-package文件(除非您是制作该文件的人),因为当更新发生时,包文件将被替换并且您的更新将丢失。
这里需要注意的是,当overrides它们到位时,Sublime 总是毫无疑问地使用它们。因此,如果您覆盖了包文件并且作者也更新了包,您更改的文件仍将被使用。
OverrideAudit包(免责声明:我是作者)监视文件何时以可能sublime-package导致您的本地更改被屏蔽的方式更新并警告您。它还包含一个命令,可以轻松创建覆盖并查看它们与它们覆盖的文件有何不同。
有关包在 ST3 中如何工作的更多信息(包括包文件可以存在的各个地方),可以在 Sublime Text 中的解密包视频中找到。
覆盖示例
为清楚起见,这里有一些使用上述机制的覆盖示例。在所有情况下,我们都将使用以下术语:
$DATA:Sublime 保存用户特定配置的位置。对于可移植构建,这是Data您解压缩构建时获得的目录;在所有其他情况下,它位于您主目录中某处的文件夹中。无论您的操作系统或安装方法如何,使用Preferences > Browse Packages并上一层文件夹即可找到此位置。
Shipped Packages:这是Packages存在于 Sublime 安装目录中的文件夹(即二进制文件所在的位置)。这包含sublime-package默认情况下 Sublime 附带的所有文件。
Installed Packages: 这是一个文件夹$DATA。包控制sublime-package在此处安装文件,您也可以在此处手动放置包文件。Sublime 可以看到此文件夹(包括子文件夹)中任何位置的包。
Unpacked Packages: 这是存放解压包的Packages文件夹。总是把你带到这里,这里是你的包裹存放的地方。$DATAPreferences > Browse PackagesUser
包加载顺序规定 SublimeShipped首先加载所有包,然后是所有Installed包,最后是Unpacked包。加载sublime-package文件时,文件夹中的覆盖Unpacked Packages将作为该阶段的一部分加载,其余文件将在以后加载。
在定义的顺序内,包按词法排序,以便它们按顺序加载,除了Default总是首先加载并且User总是最后加载。覆盖在 Sublime 尝试从该包加载特定包或资源时生效。
完全覆盖
这种类型的覆盖会导致 Sublime 完全忽略一个sublime-package文件而忽略另一个文件;您可以使用它来影响对整个包的更改,包括能够从包中删除文件,否则这是不可能的。这种机制只适用于Shipped包,并不经常使用。
在文件夹中添加一个空Python.sublime-package文件(一个不包含文件的 zip 文件)Installed Packages将导致包显示为空,因此 Python 支持将被删除。
Python.sublime-package在删除所有文件的Installed Packages文件夹中添加一个版本sublime-snippet将使 Python 支持完好无损,同时删除所有片段。
添加Sample.sublime-package到Installed Packages文件夹也不是覆盖,因为Shipped Packages文件夹不包含具有此名称的包。因此,这只是一个正常的包安装。
资源覆盖
这种类型的覆盖导致 Sublime 更喜欢文件Unpacked Packages夹中的松散包资源文件,而不是文件中类似命名的sublime-package文件(不管该包是如何安装的)。这是一种更常见的机制,您可以使用它来调整包文件的内容,而无需直接修改sublime-package文件本身。
创建一个名为的文件$DATA/Packages/Python/Python.sublime-build将覆盖相同的命名文件,Python.sublime-package因此就 Sublime 而言,该文件是文件的一部分sublime-package。
创建一个名为的文件$DATA/Packages/Python/Snippets/if.sublime-snippet会做同样的事情;文件夹中文件的名称与文件中的Python版本具有相同的相对路径和名称sublime-package,因此 Sublime 使用它。
如果您在 Windows 或 MacOS 上使用不区分大小写的文件系统,则创建名为的文件$DATA/Packages/python/python.sublime-build将被视为第一个示例,但在 Linux 上将被视为包含新构建系统的新包,因为文件名和/ 或文件夹与文件名不匹配sublime-package。
资源是否是覆盖的确定与在正确位置是否存在同名文件直接相关;任何不匹配的东西都被视为新包或新包资源。
因此,例如创建$DATA/Packages/User/Python.sublime-build不会覆盖默认的 Python 构建系统,因为默认构建是在Python包中而不是User包中。在这种情况下,这将添加第二个(同名)构建系统。
由于文件和文件夹的大小写很重要,通常最好使用某种包(如PackageResourceViewer或 OverrideAudit)来为您创建覆盖,以确保所有内容的大小写都是正确的。
虽然我有偏见,但我通常推荐 OverrideAudit 用于此用途,因为 PackageResourceViewer 有一个命令可以将整个包提取到Packages文件夹中。如果您不小心触发了该命令,您将有效地一次覆盖整个包的全部内容,这会阻止它永远更新,并且有能力导致难以追踪的问题。