先行一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多我們最近釋出了 Scripted 編輯器的 0.3 版本,並且正在快速推進下一個版本的開發。Scripted 編輯器 0.4 的主要目標之一是可擴充套件性,而可擴充套件性的其中一部分是一個簡單、可擴充套件的模板機制(另一部分是一個強大的外掛模型,將在未來的博文中介紹)。在這篇博文中,我將介紹 Scripted 編輯器的自定義程式碼完成和模板。
Sublime Text 是一款出色的通用編輯器。它高度可配置,許多 Scripted 使用者也使用 Sublime。因此,我們希望讓 Sublime 的擴充套件在有意義的地方與 Scripted 相容。其中一個領域是 sublime-completions 檔案。這些檔案指定了給定內容型別(通常對映到副檔名)的完成列表。Scripted 允許您原樣使用這些完成檔案,並提供了一些額外的功能。
首先,我將解釋如何使用現有的 sublime-completions 檔案,然後將展示如何建立新的檔案,最後我將展示我們在 Sublime Text 支援的功能之上新增的一些額外功能,以及這些功能如何在編輯器中體現出來。
*.sublime-completions
檔案重新命名為 *.scripted-completions
並將它們放入您的 ${user.home}/.scriptedrc
目錄中。完成檔案也存在於 scripted/completions
目錄中,但這些完成是由 Scripted 本身提供的,並且會在每次升級時被覆蓋。舉個例子
PHP.sublime-completions
檔案放入您的 .scriptedrc
目錄中。在 mac 上,此檔案位於 ${HOME}/Library/Application Support/Sublime Text 2/Packages/PHP/PHP.sublime-completions
PHP.scripted-completions
。scr -r
)以載入新檔案(記住...Scripted 是一個 node 應用)選擇一個建議會顯示如下內容
就這麼簡單。
讓我們以 PHP 完成的簡化部分為例
第一行是 scope
,由 Sublime 和 Scripted 用於確定完成啟用的上下文。Scripted 只識別範圍中第一個詞的副檔名(例如,php
)來確定這些完成在哪些型別的檔案中是活動的。Sublime 對範圍有更復雜的概念,Scripted 尚未實現(或暫時未實現)。接下來是完成陣列。一個簡單的字串元素(例如,php
)如果字首匹配,將把該條目新增到內容輔助建議列表中。稍微複雜一些的是帶有 trigger
和 contents
的條目。trigger
指的是將觸發完成出現在建議列表中的文字。content 部分是用來替換觸發文字的文字。$1
、$2
等指的是編輯時的 tab 停靠點。tab 停靠點可以像這樣命名 ${1:text}
。$0
是退出位置,即按下 Enter 鍵後插入符將跳轉到的位置。如果未指定,退出位置預設為完成的最後一個字元之後。需要注意 sublime-completions 和 scripted-completions 之間的一些區別:
檔案中的任何錯誤都會記錄在 ${TEMP}/scripted.log
檔案中。關於 sublime-completions 檔案格式的完整參考可在此處獲取。
Scripted 提供了一些 Sublime 中沒有的額外功能。
您可以在內容輔助建議中包含要展開的變數。例如
內容輔助將看起來像這樣
按下 Enter 將生成如下結果
目前支援的變數有:
${year}
當前年份${file}
編輯器中當前檔案的完整路徑${dir}
當前檔案的目錄名${projectDir}
當前 scripted 專案的目錄${selection}
編輯器中當前選中的文字${lineStart}
當前行的開頭空白字元${indent}
預設為 '\t' 並且可以配置${lineStart}
和 ${indent}
變數無需顯式使用。完成中的每個 '\n' 將被替換為 ${lineStart}
,每個 '\t' 將被替換為 ${indent}
。您可以在編輯器中像這樣使用它
按下 Enter 或點選,模板即被應用
請注意,格式化應用正確,使用現有空白字元來縮排程式碼。
scripted-completions 的早期形式在 0.3 版本中可用,但要使用本博文描述的所有功能,您應該使用 Scripted repository on github 的 master 分支。
在撰寫本文時,Scripted 提供 html 和 JavaScript 的完成,我們計劃為更多語言提供建議。當然,您可以新增自己的完成。如果您想成為一個好的開源公民,請考慮為您建立的任何新的完成檔案提交拉取請求。