.sublime-build 文件在 Sublime Text 3 安装后不存在

.sublime-build files not present after Sublime Text 3 install

安装 Sublime Text 2 和 运行 几个 .py 文件后 CTRL+B,我可以在文件系统中找到这个文件:

C:\Users\User\AppData\Roaming\Sublime Text 2\Packages\Python\Python.sublime-build

但是安装了Sublime Text 3(便携版from here)和运行几个Python文件后,还是找不到Python.sublime-build与Sublime相关的整个文件系统中的文本 3。

是否已将 .sublime-build 个配置文件打包到另一个 file/package 中,为什么,因为它使编辑变得不那么方便?

Sublime Text 3 附带的包存储在特殊的 ZIP 文件 (*.sublime-package) 中,您可以在 Sublime Text 程序目录中找到它们(例如 %ProgramW6432%\Sublime Text 3\Packages)。

除了任何解压缩工具,您还可以使用 Package Resource Viewer package to extract and edit them (see the override section in the Package Control documentation 了解详细信息)

分离允许包开发人员更新他们的包而不会覆盖您的自定义设置。

Have .sublime-build config files been packed into another file/package

从技术上讲,您的问题的答案是否定的; Python.sublime-build 文件仍然在同一个 Python.sublime-package 中,但与 ST2 不同的是,ST3 可以读取 sublime-package 文件的内容而无需先提取它们。

在 ST2 中,Sublime 每次启动时都会执行一个名为 "Package Setup" 的步骤,由此它将 sublime-package 文件的内容提取到 Packages 文件夹中(当包文件已更改或当文件夹版本不存在时)。如果您查看 ST2 控制台的顶部,您可以看到有关它是否认为需要进行设置的消息。

在 ST3 中,Sublime 可以直接从 sublime-package 文件中读取包资源,因此它不再执行以前的包提取步骤。

因此,在 ST2 中您可以转到 Packages 文件夹查看包的内容,现在您需要自己查看 sublime-package 文件的内部(它只是一个 zip具有不同扩展名的文件)或使用命令面板中的 View Package File 命令,这将允许您查看和打开任何包中的任何包资源。

why, since it makes the editing much less handy?

此更改的主要原因之一是使编辑包资源更安全。以前如果你要编辑一个包的提取内容,如果那个包有更新,Sublime 会重新提取新的包文件,这可能会破坏你的更改。

为了允许包更新而不发生这种情况,ST3 支持包和资源的 overrides 的想法;本质上是你提供一个外部文件并告诉 Sublime "Use this file instead of that one";这样即使 sublime-package 文件发生变化,您的更改也会保持不变。

这可以通过两种不同的方式发生:

  • 如果你在Installed Packages文件夹中放置一个sublime-package文件,并且Packages文件夹中出现一个类似名称的包在Sublime中安装目录,则使用Installed Packages中的版本,忽略Sublime自带的版本。这允许您替换 Sublime 附带的包。

  • 如果在你的用户配置区文件夹Packages中有一个模仿sublime-package文件名的文件夹(例如 Python.sublime-packagePython/),则文件夹的内容被视为 sublime-package 文件的一部分,允许您扩充包。

    此外,如果文件夹版本中出现任何具有相同名称和相对路径的文件,它们将被用来代替sublime-package文件中的文件(文件名和路径的情况可以在某些情况下很重要,因此最好准确地模仿它)。这允许您安全地修改包的内容。

在这两种情况下,您都可以根据自己的喜好自由修改程序包,同时确保无论发生什么更新,您的更改都将保持不变。因此,重要的是要注意你应该永远不要修改sublime-package文件(除非你是制作它的人)因为当更新发生时,包文件将被替换,您的更新将丢失。

这里需要注意的是,当 overrides 到位时,Sublime 总是毫无疑问地使用它们。因此,如果您正在覆盖包文件并且作者也更新了包,您更改的文件仍将被使用。

OverrideAudit 包(免责声明:我是作者)监控何时 sublime-package 文件以可能导致您的本地更改被屏蔽的方式更新并警告您。它还包含一个命令,用于轻松创建覆盖并查看它们与它们正在覆盖的文件有何不同。

有关包如何在 ST3 中工作的更多信息(包括包文件可以存在的各个位置)可以在 Demystifying Packages in Sublime Text 视频中找到。


覆盖示例

为清楚起见,这里有一些使用上述机制进行覆盖的示例。在所有情况下,我们都将使用以下术语:

  • $DATA:Sublime 保存用户特定配置的位置。对于可移植构建,这是解压缩构建时获得的 Data 目录;在所有其他情况下,它位于您的主目录中某处的文件夹中。使用 Preferences > Browse Packages 并向上一级文件夹找到此位置,无论您的 OS 或安装方法如何。

  • Shipped Packages:这是名为 Packages 的文件夹,存在于 Sublime 本身的安装目录中(即二进制文件所在的位置)。这包含 Sublime 默认附带的所有 sublime-package 文件。

  • Installed Packages: 这是$DATA中的一个文件夹。 Package Control 在此处安装 sublime-package 文件,您也可以在此处手动放置包文件。 Sublime 可以看到此文件夹中任何位置(包括子文件夹)中的包。

  • Unpacked Packages:这是$DATA里面的Packages文件夹,里面存放解压包。 Preferences > Browse Packages 总是把你带到这里,它是你的 User 包裹存放的地方。

包加载顺序规定 Sublime 首先加载所有 Shipped 包,然后是所有 Installed 包,最后是 Unpacked 包。加载 sublime-package 文件时,Unpacked Packages 文件夹中的覆盖作为该阶段的一部分加载,所有剩余文件稍后加载。

在定义的顺序内,包按词法排序,以便它们按顺序加载,除了 Default 总是首先加载而 User 总是最后加载。覆盖在 Sublime 尝试从该包加载特定包或资源时生效。

完全覆盖

这种类型的重写导致 Sublime 完全忽略一个 sublime-package 文件以支持另一个;您可以使用它来影响对整个包的更改,包括能够从包中删除文件,否则这是不可能的。此机制仅适用于 Shipped 个包,并不经常使用。

  • Installed Packages 文件夹添加一个空 Python.sublime-package(不包含任何文件的 zip 文件)将导致包显示为空,因此 Python 支持将被移除。

  • Python.sublime-package 的一个版本添加到删除了所有 sublime-snippet 文件的 Installed Packages 文件夹将在删除时保持 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 上的新构建系统的新包,因为文件名 and/or 的情况下文件夹与 sublime-package 文件名不匹配。

判断资源是否覆盖与正确位置是否存在同名文件直接相关;任何不匹配的都被视为新包或新包资源。

因此,例如创建 $DATA/Packages/User/Python.sublime-build 不会覆盖默认的 Python 构建系统,因为默认构建位于 Python 包中,而不是 User 包中。在这种情况下,这将添加第二个(同名的)构建系统。

由于文件和文件夹的大小写很重要,通常最好使用某种包(如 PackageResourceViewer 或 OverrideAudit)为您创建覆盖以确保所有内容的大小写都是正确的.

虽然我有偏见,但我通常建议将 OverrideAudit 用于此用途,因为 PackageResourceViewer 有一个命令可以将整个包提取到 Packages 文件夹中。如果您不小心触发了该命令,您将有效地立即覆盖整个包的全部内容,这会阻止它进行更新,并有可能导致难以追踪的问题。