簡體   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