繁体   English   中英

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

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

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

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

但是,在安装了 Sublime Text 3(来自此处的便携式版本)并运行了一些 Python 文件后,我仍然无法在整个文件系统中找到与 Sublime Text 3 相关的Python.sublime-build

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

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

除了任何解压缩工具,您还可以使用包资源查看器包来提取和编辑它们(有关详细信息,请参阅包控制文档中的覆盖部分)

这种分离允许包开发人员在不覆盖您的自定义的情况下更新他们的包。

将 .sublime-build 配置文件打包到另一个文件/包中

从技术上讲,您的问题的答案是否定的; 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来自命令面板的View Package File命令,这将允许您查看和打开任何包中的任何包资源。

为什么,因为它使编辑变得不那么方便?

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

为了允许包更新而不发生这种情况,ST3 支持包和资源的overrides思想; 本质上是你提供一个外部文件并告诉 Sublime“使用这个文件而不是那个文件”的想法; 这样,即使sublime-package文件发生更改,您的更改也保持不变。

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

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

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

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

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

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

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

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


覆盖示例

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

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

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

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

  • Unpacked Packages :这是$DATA中的Packages文件夹,用于存储未打包的包。 Preferences > Browse Packages总是把你带到这里,它是你的User包的存储位置。

包加载顺序决定了崇高加载所有的Shipped包第一,那么所有的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文件的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 使用它。

  • 创建一个名为$DATA/Packages/python/python.sublime-build将被视为第一个例子,如果你在 Windows 或 MacOS 上使用不区分大小写的文件系统,但将被视为包含新的包在 Linux 上构建系统,因为文件名和/或文件夹的大小写与sublime-package文件名不匹配。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM