客製化

程式碼片段(Snippets)

程式碼片段將經常重複使用的程式碼儲存起來,可以讓你只輸入幾個關鍵字,按下 Tab 自動完成其餘的部份。

Sublime Text 的程式碼片段與 Textmate 完全相容,檔案以 .sublime-snippet(XML 格式)為副檔名,以下這是個範例:

<snippet>
    <content><![CDATA[def ${1:method_name}
  $0
end]]></content>
    <tabTrigger>def</tabTrigger>
    <scope>source.ruby</scope>
    <description>def … end</description>
</snippet>
  • content:程式碼片段的內容;
  • tabTrigger:觸發自動完成這段程式碼的關鍵字;
  • scope:選擇哪類的檔案會觸發這段程式碼;
  • description:給人類閱讀的友善描述;

$1$2$3 是按 Tab 自動移動的位置(Shift + Tab 回到上個位置),${1:method_name} 會選取這段文字(佔位符的意思),$0Tab 移動的最後一個位置。

巨集(Macros)

當你需要大量重複動作完成相同的作業,巨集是個簡單的自動化工具可以幫你完成。Sublime Text 的巨集定義在 .sublime-macro 檔案(JSON 格式)。

使用快捷鍵 Ctrl + Q 開始記錄,再按一次停止;剛剛記錄的巨集不會儲存成檔案,只會暫時放在 buffer 裡面,要執行剛剛的巨集可以使用快捷鍵 Ctrl + Shift + Q;如果要把剛剛的巨集儲存成檔案,可以從選單欄選取 Tools >> Save Macro 存到 User/ 目錄下。

你也可以手建一份巨集檔案,以下這是範例:

[
    {"command": "move_to", "args": {"to": "hardeol"}},
    {"command": "insert", "args": {"characters": "\n"}}
]

command 部分請參考指令

原則上巨集可以儲存在任何 package 目錄下,不過還是建議放在 User/ 目錄下,Sublime Text 會自動讀取 Packages/ 目錄裡所有的 .sublime-macro 檔案,你可以在選單 Tools >> Macros 下找到先前儲存過的巨集。

指令(Commands)

指令在 Sublime Text 中到處可見,快捷鍵設定、選單項目、巨集等等都會用到。有些指令是 Sublime Text 本身的核心功能,有些則是其他 Python 開發的外掛實作的。順帶一提,所有的指令都可以被 Python 外掛使用。

指令名稱命名規則是小寫,不同單字以下畫線分離,例如 hot_exit;你也可以傳入參數給指令,參數一概是 JSON 類型,以下在 Python 控制台執行指令的範例:

view.run_command("goto_line", {"line": 10})
view.run_command('insert_snippet', {"contents": "<$SELECTION>"})
view.window().run_command("prompt_select_project")

Sublime Text 2 指令參考列表:Commands

自動補全

自動補全功能會根據 Sublime Text 的演算法,用 Tab 鍵快速補全最佳的單字,這個功能預設是啟用的,你也可以在偏好設定裡將這個功能取消:

{
    "tab_completion": false
}

可以使用快捷鍵 Ctrl + Space 叫出自動補全選單,手動選擇你要補全的字。你也能自己建立自動補全檔案,以 JSON 格式儲存在副檔名為 .sublime-completions 的檔案,以下是個基本範例:

{
    "scope": "text.html - source - meta.tag, punctuation.definition.tag.begin",

    "completions":
    [
        { "trigger": "a", "contents": "<a href=\"$1\">$0</a>" },
        { "trigger": "abbr", "contents": "<abbr>$0</abbr>" },
        { "trigger": "acronym", "contents": "<acronym>$0</acronym>" }
    ]
}
  • scope:決定哪類檔案會使用這份自動補全清單;
  • completions:自補補全的的陣列;

偏好設定(Settings)

sublime-settings-default

Sublime Text 2 的偏好設定都是用 JSON 格式儲存在副檔名為 .sublime-settings 的檔案,不論是編輯器本身,或其他 package 的偏好設定,都是用這樣的方式。這樣看起來有點複雜,目的是為了更佳的客製化彈性。

如何修改偏好設定

sublime-default-settings

Sublime Text 2 預設的偏好設定放在 Packages/Default/Preferences.sublime-settings,你可以從選單 Preferences >> Settings - Default 打開它看看有哪些選項,每個選項旁邊都有詳細的註解,但是你不應該直接修改它,因為當軟體升級時這些設定就會被重置。

個人的偏好設定檔都應該放在 Packages/User/ 目錄下,我們曾在目錄結構章節介紹過,軟體更新不會變更 User/ 目錄下的檔案。

你可以從選單 Preferences >> Settings - User 或是快捷鍵 Command + , 打開個人偏好設定的檔案,如果先前從來沒有建立過這份檔案,那麼 Sublime Text 2 會替你自動在 Packages/User/ 目錄下建立 Preferences.sublime-settings

設定檔的區別

不同設定檔的用途以不同檔案名稱來區分,package 的設定檔通常以自己的名稱來命名。

此外,檔名也會關聯到這些設定檔控制的檔案,舉例來說:有個檔案副檔名是 .py,它的語法定義在一個叫 Python.tmLanguage 的檔案裡,那對應到的設定檔就應該叫做 Python.sublime-settings

如果要指定該設定檔在某平台上才會生效,可以在檔名後加上括號,例如:Preferences (Linux).sublime-settings,括號內的有效值可以是 Windows、OSX 或 Linux。

這些指定平台的設定檔,在 Packages/Users/ 目錄下會被忽略,這是為了要確保只有一個設定檔留到最後合併

合併設定檔的優先排序

相同檔名的設定檔可能在不同位置會重複出現,Sublime Text 2 讀取這些檔案後先依照字母順序排列,然後將他們合併,排在越後面的的設定檔優先層級越高。

除了兩個資料夾比較特殊:Packages/Default/Packages/User/,前者裡的設定檔將總是排在序列的第一個,後者則總是排在最後一個。

讓我再說明更清楚,Packages/User/ 目錄內的設定檔,與其他相同名稱的設定檔相較,擁有更高的優先權,且不會隨著軟體更新而改變。

除此之外,Sublime Text 2 會自動維護一個 session 檔案(放在跟 Packages/ 同級的 Settings/ 目錄下),用來儲存你編輯檔案時的任何動作跟設定,例如搜尋了哪些字或是調整側邊欄寬度,都會隨時更新在這個檔案裡,而這個檔案裡的設定,優先權將比任何一個可用的 .sublime-setting 設定檔都還要更高。

最後需要知道的是,當你為某些設定值失效感到困惑時,這可能是因為某些設定依你的使用情況自己自動調整,例如與空格相關或語法的設定。

以下你可以看到 Sublime Text 2 在 OS X 上是如何處理設定檔的優先順序:

  • Packages/Default/Preferences.sublime-settings
  • Packages/Default/Preferences (OSX).sublime-settings
  • Packages/User/Preferences.sublime-settings
  • Packages/Python/Python.sublime-settings
  • Packages/User/Python.sublime-settings
  • session 資料
  • 自動調整檔案

檔案類型的設定

如果想要讓某檔案類型,使用指定的語法定義(語法高亮),例如我想要讓 Gemfile、Vagrantfile 和 Thorfile 這些檔案,預設自動使用 Ruby 的語法定義,可以這麼做:

Ruby 的語法定義檔案是 Ruby.tmLanguage,你需要建立一個相同名稱的 Ruby.sublime-settings 設定檔,放在 User/ 目錄下,然後檔案加上以下內容:

{
  "extensions": [
    "Gemfile",
    "Vagrantfile",
    "Thorfile"
  ]
}

完成之後,當你重新打開這些檔案,就可以看到可以自動使用 Ruby 的語法高亮了。

快捷鍵組合設定(Key Bindings)

Sublime Text 2 快捷鍵組合設定用 JSON 格式儲存在副檔名為 .sublime-keymap 的檔案,為了與各個平台整合,每個平台都有各自對應的檔案,也只有對應的平台才會讀取該檔案。命名規則是在檔名後面加上括號:Default (OSX).sublime-keymap,有效值可以是 Windows、OSX 或 Linux。

設定快捷鍵的語法格式

快捷鍵設定的語法主要是由 keyscommand 組成,command 部分請參考指令。以下是典型的 OS X 快捷鍵設定例子:

[
  { "keys": ["super+shift+n"], "command": "new_window" },
  { "keys": ["super+o"], "command": "prompt_open" }
]

當按下 Command + O 便會呼叫 prompt_open 這個命令。除此之外,也可以帶參數傳給命令:

[
  { "keys": ["shift+tab"], "command": "insert", "args": {"characters": "\t"} }
]

當按下 Shift + Tab 時呼叫 insert 命令,並將參數 \t 傳給它。

還有一種進階的寫法,就是傳入 context 給命令,快捷鍵會基於插字符號的前後關係或是其他情況而觸發,或者是無效:

{ "keys": ["escape"], "command": "clear_fields", "context":
  [
    { "key": "has_next_field", "operator": "equal", "operand": true }
  ]
}

新增與修改快捷鍵設定

Sublime Text 2 預設的快捷鍵設定檔放在 Packages/Default/Default (OSX).sublime-keymap,也可從選單 Preferences >> Key Bindings - Default 打開這個檔案。你可以依照個人的喜好,或者有些快捷鍵衝突無法使用,需要修改快捷鍵的設定,那麼你可以參考這份檔案的設定,將快捷鍵修改成你想要的按鍵。

就如同偏好設定的檔案一樣,你應該在 Packages/User/ 目錄下另建一個 Default (OSX).sublime-keymap,而不是直接修改 Default/ 目錄下的東西。

快捷鍵設定檔的合併方式與偏好設定一樣,合併前的排序方式也幾乎相同,進一步了解請參考合併設定檔的優先排序

外掛的偏好設定與快捷鍵

SideBarEnhancements 這個外掛來舉例,打開這個 package 可以找到以下這幾種檔案類型:.sublime-commands.sublime-keymap.sublime-settings,他們分別的作用是:

  • Commands.sublime-commands:在指令面板章節曾經介紹過,Sublime Text 2 會讀取所有 .sublime-commands 檔案,然後列在指令面板中,你可以在這裡找到可以用的指令;
  • Default.sublime-keymap:這是外掛預設的快捷鍵配置,很有可能會跟你原本的一些快捷鍵衝突,因此需要自己把衝突的快捷鍵改掉;
  • Side Bar.sublime-settings:這是給外掛用的偏好設定,你可以參考這裡的設定,在 Packages/User/ 目錄下新建一個 Side Bar.sublime-settings 來覆蓋原本的。

當我們打開 Commands.sublime-commands 可以看到以下的指令:

[
  { "caption": "File: Rename",    "command": "side_bar_rename" },
  { "caption": "File: Duplicate", "command": "side_bar_duplicate" }
]

現在想替外掛的 side_bar_rename 指令加上快捷鍵來使用,所以我們從選單欄點選 Preferences >> Key Bindings - User,打開 Default (OSX).sublime-keymap(位在 Packages/User/ 下)加上:

[
  { "keys": ["f2"], "command": "side_bar_rename" }
]

以後直接按 F2 便可以重新命名檔案名稱了!Done!