[英].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-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-package
和Python/
),则该文件夹的内容被认为是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.