原文:Snippets
不管是在編碼,還是寫暢銷書,你都可能會需要一遍又一遍的用到一些文本的小片斷。使用片斷來結束這種單調無聊的碼字吧,片斷是一種智能的模板,它能在合適的上下文中插入你需要的文本內容。
創建一個新的片斷,選擇 Tools | New Snippet... Sublime Text 將為你生成一個片斷的基本的骨架。
片斷可以保存在任何的包文件夾中,但為了簡單起見,你可以保存在 Packages/User 文件夾下。
格式
通常的片斷存在於某一個 Sublime Text 的包中。它們是一些以 sublime-snippet 為擴展名的簡單的 XML 文件。舉例來說,你可以在 Email 包下面創建一個 greeting.sublime-snippet 的片斷。
典型的版本的結構如下(包含默認提示):
1 <snippet> 2 <content><![CDATA[Type your snippet here]]></content> 3 <!-- Optional: Tab trigger to activate the snippet --> 4 <tabTrigger>xyzzy</tabTrigger> 5 <!-- Optional: Scope the tab trigger will be active in --> 6 <scope>source.python</scope> 7 <!-- Optional: Description to show in the menu --> 8 <description>My Fancy Snippet</description> 9 </snippet>
snippet 中包含了所有 Sublime Text 需要的信息,插入什么、是否插入、何時插入。
content
實際插入的內容,代碼片斷可以從簡單到非常復雜,接下來的例子我們會看到。
在創建自定義的代碼片斷的時候,需要注意以下:
a、如果想得到字符 $ ,必須進行轉義:\$
b、如果片斷中包含縮進,統一使用 tab。插入片斷的時候,如果 translateTabsToSpaces 選項打開,會自動將 tab 轉換成 space
文本內容必須包含在 <![CDTAT[...]]> 中,否則將失效。
tabTrigger
定義了一個觸發插入片斷的字符序列,當輸入該序列后,按下 tab 鍵將插入片斷。
tab 是隱含的綁定,不需要特意指定。
scope
定義了該片斷的作用域,也就是只有在指定的擴展名的文件里面才會生效。更多信息請戳:Scopes。
description
將會顯示在片斷的上下文菜單中,如果留空,將默認顯示該片斷的文件名。
通過以上內容,已經可以開始寫一個自己的代碼片斷了。
特性
環境變量
片斷可以從環境變量中訪問上下文件信息。Sublime Text 會自動給以下列出來的變量賦值。
當然你也可以進行擴展,加入自己的變量。自定義的變量需要定義在 .sublime-options 文件中。
| $PARAM1, $PARAM2… | 傳給 insert_snippet 命令的參數 |
| $SELECTION | 片斷觸發后將被選中 |
| $TM_CURRENT_LINE | 片斷觸發后光標所在行的內容 |
| $TM_CURRENT_WORD | 片斷觸發后光標所在單詞 |
| $TM_FILENAME | 文件名(包含擴展名) |
| $TM_FILEPATH | 文件路徑 |
| $TM_FULLNAME | 電腦用戶名 |
| $TM_LINE_INDEX | 片斷觸發時光標所在的列,從0算起 |
| $TM_LINE_NUMBER | 片斷觸發時光標所在的行,從1算起 |
| $TM_SELECTED_TEXT | 同 $SELECTION |
| $TM_SOFT_TABS | 如果 translate_tabs_to_spaces 為 true 時 YES,否則 NO |
| $TM_TAB_SIZE | 每個 tab 需要的 space 數量,由 tab_size 控制 |
看幾個使用了變量的片斷例子:
==================================== USER NAME: $TM_FULLNAME FILE NAME: $TM_FILENAME TAB SIZE: $TM_TAB_SIZE SOFT TABS: $TM_SOFT_TABS ==================================== # Output: ==================================== USER NAME: guillermo FILE NAME: test.txt TAB SIZE: 4 SOFT TABS: YES ====================================
字段
在字段的標記下,你可以通過按 tab 鍵依次的在代碼片斷中跳轉位置。字段的作用就是當你插入片斷的時候幫助你完成個性化的設置。
First Name: $1 Second Name: $2 Address: $3
以上的例子中,當你按下 tab 后光標會跳到 $1 的位置。當第二次按 tab,將跳轉到 $2,依此類推。當然,你也可以按 shift+tab 來返回上一個位置。如果在按完最高的那個 tab 之后再按 tab,Sublime Text 將把光標定位到片斷內容的最后,這樣你就可以進入普通的編輯模式了。
如果你想控制最后的定位點的位置,使用 $0 來標記。
可以在任何時間,通過按 Esc 退出字段的循環。
鏡像字段
相同的字段將互相標記為鏡像字段:當你編輯第一個的時候,剩下的地方將被填充同樣的內容,也就是在相同的字段的位置都會出現光標,所以接下來的輸入對所有字段位置都有效。
First Name: $1 Second Name: $2 Address: $3 User name: $1
在這個例子中,“User name” 后面的位置將被填充為和 “First Name” 后面位置一樣的值。
占位符
稍微擴展一下字段的語法,你就可以為一個字段定義一個默認值。當你的有一個比較通用的代碼片斷,但同時你又想很方便的自定義的時候,占位符就非常有用。
First Name: ${1:Guillermo}
Second Name: ${2:López}
Address: ${3:Main Street 1234}
User name: $1
變量也可以用作占位符:
First Name: ${1:Guillermo}
Second Name: ${2:López}
Address: ${3:Main Street 1234}
User name: ${4:$TM_FULLNAME}
還可以嵌套占位符:
Test: ${1:Nested ${2:Placeholder}}
替換
除占位的語法外,還可以通過替換來執行更復雜的操作。使用替換來動態的生成文本。
替換的語法如下:
${var_name/regex/format_string/}
${var_name/regex/format_string/options}
var_name
變量名:1,2,3...
regex
Perl 風格的正則表達式。更多請戳:Boost library reference for regular expressions
format_string
戳上面那個鏈接
options
可選的。可以是以下的任意一種:i 不區分大小寫、g 替換全局、m 匹配多行
通過替換功能,以下例子中,輕松的得到下划線:
Original: ${1:Hey, Joe!}
Transformation: ${1/./=/g}
# Output:
Original: Hey, Joe!
Transformation: =========
獲取當前文件名(不包含擴展名):
<snippet> <content><![CDATA[ using UnityEngine; using System.Collections; public class ${TM_FILENAME/(.+)\..+/$1/} : MonoBehaviour { // Use this for initialization void Start() { ${1} } // Update is called once per frame void Update() { } }]]></content> <tabTrigger>ucs</tabTrigger> <description>Unity Class</description> <scope>source.cs</scope> </snippet>
