<blockquote>
<p>Have .sublime-build config files been packed into another file/package</p>
</blockquote>
<p>从技术上讲,您的问题的答案是否定的;<code>Python.sublime-build</code>文件仍然在相同的<code>Python.sublime-package</code>中,但是与ST2不同,ST3可以读取<code>sublime-package</code>文件的内容,而不必先提取它们。在</p>
<p>在ST2中,Sublime每次启动时都会执行一个名为“Package Setup”的步骤,从而将<code>sublime-package</code>文件的内容提取到<code>Packages</code>文件夹中(当包文件已更改或文件夹版本不存在时)。如果您检查ST2控制台的顶部,您可以看到关于它是否认为需要进行设置的消息。在</p>
<p>在ST3中,Sublime可以直接从<code>sublime-package</code>文件中读取包资源,因此它不再执行以前的包提取步骤。在</p>
<p>因此,在ST2中,您可以进入<code>Packages</code>文件夹查看包的内容,现在您需要亲自查看<code>sublime-package</code>文件的内部(它只是一个具有不同扩展名的zip文件),或者使用命令调色板中的<code>View Package File</code>命令,这将允许您查看和打开任何包中的任何包资源。在</p>
<blockquote>
<p>why, since it makes the editing much less handy?</p>
</blockquote>
<p>这种变化的主要原因之一是为了使编辑包资源更安全。以前,如果您要编辑一个包的提取内容,如果该包曾经被更新,Sublime将重新提取新的包文件,这可能会使您的更改被删除。在</p>
<p>为了在不发生这种情况的情况下更新包,ST3支持包和资源的<code>overrides</code>的思想;本质上是您提供一个外部文件并告诉Sublime“使用这个文件而不是那个文件”;这样即使{<cd3>}文件发生了变化,您的更改也保持不变。在</p>
<p>这可能以两种不同的方式发生:</p>
<ul>
<li><p>如果您将<code>sublime-package</code>文件放在<code>Installed Packages</code>文件夹中,并且在Sublime安装目录</strong>的<code>Packages</code>文件夹<strong>中出现一个类似名称的包,则使用<code>Installed Packages</code>中的版本,并忽略Sublime附带的版本。这使您可以用Sublime替换运送的包。</p></li>
<li><p>如果在用户配置区域</strong>中的<code>Packages</code>文件夹<strong>中有一个模仿<code>sublime-package</code>文件名的文件夹(例如<code>Python.sublime-package</code>和<code>Python/</code>),那么该文件夹的内容将被视为<code>sublime-package</code>文件的一部分,允许您扩充包。在</p>
<p>此外,如果在文件夹版本中出现的任何文件具有相同的名称和相对路径,则将使用它们来代替<code>sublime-package</code>文件中的文件(在某些情况下,文件名和路径的大小写可能很重要,因此最好精确地模仿它)。这允许您安全地修改包的内容。</p></li>
</ul>
<p>在这两种情况下,你可以自由修改你喜欢的包,同时确保无论发生什么更新,你的更改都会保持不变。因此,需要注意的是,您应该永远不要修改<code>sublime-package</code>文件(除非是您自己做的),因为当更新发生时,包文件将被替换,您的更新将丢失。在</p>
<p>这里需要注意的是,当<code>overrides</code>就位时,Sublime总是毫无疑问地使用它们。因此,如果您重写了一个包文件,并且作者也更新了该包,您更改的文件仍将被使用。在</p>
<p><a href="https://packagecontrol.io/packages/OverrideAudit" rel="nofollow noreferrer">OverrideAudit</a>包(免责声明:我是作者)将监视<code>sublime-package</code>文件的更新时间,该文件可能会导致本地更改被屏蔽,并警告您。它还包含一个命令,可以轻松创建覆盖,并查看它们与重写的文件之间的区别。在</p>
<p>关于包在ST3中如何工作的更多信息(包括包文件可以存在的各种地方),可以在<a href="https://youtu.be/x6t3YdpxZfo" rel="nofollow noreferrer">Demystifying Packages in Sublime Text</a>视频中找到。在</p>
<hr/>
<h2>覆盖示例</h2>
<p>为了清楚起见,下面是一些使用上述机制的覆盖示例。无论如何我们都要去ng使用以下术语:</p>
<ul>
<li><p><code>$DATA</code>:Sublime保存用户特定配置的位置。对于可移植的构建,这是您解包构建时得到的<code>Data</code>目录;在所有其他情况下,它都位于主目录的某个文件夹中。无论您的操作系统或安装方法如何,使用<code>Preferences > Browse Packages</code>并向上一个文件夹级别查找此位置。</p></li>
<li><p><code>Shipped Packages</code>:这是一个名为<code>Packages</code>的文件夹,位于Sublime本身的安装目录中(即二进制文件所在的位置)。这包含Sublime默认附带的所有<code>sublime-package</code>文件。</p></li>
<li><p><code>Installed Packages</code>:这是^{<cd25>中的一个文件夹。Package Control在这里安装<code>sublime-package</code>文件,您也可以手动将包文件放在这里。Sublime将看到此文件夹(包括子文件夹)中任何位置包含的包。</p></li>
<li><p><code>Unpacked Packages</code>:这是<code>Packages</code>中的<code>Packages</code>文件夹,其中存储未打包的包。<code>Preferences > Browse Packages</code>总是把你带到这里,你的<code>User</code>包就是在这里存储的。</p></li>
</ul>
<p>包加载顺序规定Sublime首先加载所有<code>Shipped</code>包,然后加载所有<code>Installed</code>包,最后加载<code>Unpacked</code>包。在加载<code>sublime-package</code>文件时,<code>Unpacked Packages</code>文件夹中的重写将作为该阶段的一部分加载,其余的文件将在以后加载。在</p>
<p>在定义的顺序内,包按字典顺序排序,以便按顺序加载,但<code>Default</code>总是首先加载,而{<cd38>}总是最后加载。重写在Sublime尝试从该包加载特定包或资源时生效。在</p>
<h3>完成覆盖</h3>
<p>这种类型的重写会导致Sublime完全忽略一个<code>sublime-package</code>文件,而忽略另一个文件;您可以使用此方法来影响对整个包的更改,包括能够从包中删除文件,这在其他情况下是不可能的。这种机制只适用于<code>Shipped</code>包,不经常使用。在</p>
<ul>
<li><p>将空的<code>Python.sublime-package</code>(不包含任何文件的zip文件)添加到<code>Installed Packages</code>文件夹将导致包显示为空,因此Python支持将被删除。</p></li>
<li><p>将<code>Python.sublime-package</code>的版本添加到删除了所有<code>sublime-snippet</code>文件的<code>Installed Packages</code>文件夹中,可以在删除所有代码段的同时保持Python的完整支持。</p></li>
<li><p>将<code>Sample.sublime-package</code>添加到<code>Installed Packages</code>文件夹也不是重写,因为<code>Shipped Packages</code>文件夹不包含具有此名称的包。因此,这只是一个正常的软件包安装。</p></li>
</ul>
<h3>资源覆盖</h3>
<p>这种类型的重写会导致Sublime优先选择<code>Unpacked Packages</code>文件夹中的松散包资源文件,而不是<code>sublime-package</code>文件中类似名称的文件(无论该包是如何安装的)。这是一种更常见的机制,您可以使用它来调整包文件的内容,而不直接修改<code>sublime-package</code>文件本身。在</p>
<ul>
<li><p>创建一个名为<code>$DATA/Packages/Python/Python.sublime-build</code>的文件将覆盖<code>Python.sublime-package</code>中的同一个命名文件,因此就Sublime而言,该文件是<code>sublime-package</code>文件的一部分。</p></li>
<li><p>创建一个名为<code>$DATA/Packages/Python/Snippets/if.sublime-snippet</code>的文件也会做同样的事情;<code>Python</code>文件夹中的文件名与{<cd3>}文件中的版本具有相同的相对路径和名称,因此Sublime使用它。</p></li>
<li><p>如果您在Windows或MacOS上使用不区分大小写的文件系统,那么创建一个名为<code>$DATA/Packages/python/python.sublime-build</code>的文件将被视为第一个示例,但将被视为在Linux上包含新生成系统的新包,因为文件名和/或文件夹的大小写与<code>sublime-package</code>文件名不匹配。</p></li>
</ul>
<p>一个资源是否是重写的决定直接关系到在正确的位置是否有一个同名的文件;任何不匹配的都被认为是新包或新包reso乌尔奇。在</p>
<p>例如,创建<code>$DATA/Packages/User/Python.sublime-build</code>不会覆盖默认的Python构建系统,因为默认构建在<code>Python</code>包中,而不是{<cd38>}包中。在这种情况下,这将添加第二个(同名)构建系统。在</p>
<p>由于文件和文件夹的情况很重要,通常最好使用某种类型的包(如<a href="https://packagecontrol.io/packages/PackageResourceViewer" rel="nofollow noreferrer">PackageResourceViewer</a>或OverrideAudit)为您创建重写,以确保所有内容的大小写都是正确的。在</p>
<p>尽管我有偏见,但我通常建议使用OverrideAudit,因为PackageResourceViewer有一个命令,可以将整个包提取到<code>Packages</code>文件夹中。如果不小心触发了该命令,那么您将立即有效地覆盖整个包的整个内容,这将阻止它进行任何更新,并有可能导致其他难以跟踪的问题。在</p>