手把手教你寫Sublime中的Snippet


Sublime Text號稱最性感的編輯器, 并且越來越多人使用, 美觀, 高效

關(guān)于如何使用Sublime text可以參考我的另一篇文章, 相信你會喜歡上的..
Sublime Text 2使用心得

現(xiàn)在介紹一下Snippet, Snippets are smart templates that will insert text for you and adapt it to their context. Snippet 是插入到文本中的智能模板并使這段文本適當(dāng)當(dāng)前代碼環(huán)境. 程序員總是會不斷的重寫一些簡單的代碼片段, 這種工作乏味/無聊, 而Snippet的出現(xiàn)會讓Code更加高效.

1. Snippe創(chuàng)建,存儲和格式


(這里snippet稱作代碼片段)

Snippet可以存儲在任何的文件夾中, 并且以.sublime-snippet為文件擴(kuò)展名, 默認(rèn)是存儲在.sublime-snippet文件夾下.

Snippet文件是以.sublime-snippet為擴(kuò)展的XML文件, 可以命名為XXX.sublime-snippet, 創(chuàng)建自己的snippet的方式為菜單欄Tools | New Snippet..

下面看一下新建的文件格式:

<snippet>
    <content><![CDATA[
Hello, ${1:this} is a ${2:snippet}.
]]></content>
    <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
    <!-- <tabTrigger>hello</tabTrigger> -->
    <!-- Optional: Set a scope to limit where the snippet will trigger -->
    <!-- <scope>source.python</scope> -->
</snippet>

為了方便理解簡化以上代碼:

<snippet>
    <content><![CDATA[Type your snippet here]]></content>
    <!-- Optional: Tab trigger to activate the snippet -->
    <tabTrigger>hello</tabTrigger>
    <!-- Optional: Scope the tab trigger will be active in -->
    <scope>source.python</scope>
    <!-- Optional: Description to show in the menu -->
    <description>My Fancy Snippet</description>
</snippet>

簡要介紹一下snippet四個組成部分:

  • content:其中必須包含<![CDATA[…]]>,否則無法工作, Type your snippet here用來寫你自己的代碼片段
  • tabTrigger:用來引發(fā)代碼片段的字符或者字符串, 比如在以上例子上, 在編輯窗口輸入hello然后按下tab就會在編輯器輸出Type your snippet here這段代碼片段
  • scope: 表示你的代碼片段會在那種語言環(huán)境下激活, 比如上面代碼定義了source.python, 意思是這段代碼片段會在python語言環(huán)境下激活.
  • description :展示代碼片段的描述, 如果不寫的話, 默認(rèn)使用代碼片段的文件名作為描述

2. snippet環(huán)境變量


列舉一下可能用到的環(huán)境變量, 這些環(huán)境變量是在Sublime中已經(jīng)預(yù)定義的.

環(huán)境變量名 描述
$TM_FILENAME 用戶文件名
$TM_FILEPATH 用戶文件全路徑
$TM_FULLNAME 用戶的用戶名
$TM_LINE_INDEX 插入多少列, 默認(rèn)為0
$TM_LINE_NUMBER 一個snippet插入多少行
$TM_SOFT_TABS 如果設(shè)置translate_tabs_to_spaces : true 則為Yes
$TM_TAB_SIZE 每個Tab包含幾個空格

同一通過下面的代碼片段進(jìn)行驗證:

<snippet>
   <content><![CDATA[
=================================
$TM_FILENAME   用戶文件名
$TM_FILEPATH   用戶文件全路徑
$TM_FULLNAME    用戶的用戶名
$TM_LINE_INDEX   插入多少列, 默認(rèn)為0
$TM_LINE_NUMBER   一個snippet插入多少行
$TM_SOFT_TABS  如果設(shè)置translate_tabs_to_spaces : true 則為Yes
$TM_TAB_SIZE   每個Tab包含幾個空格
=================================
]]></content>
    <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
    <tabTrigger>hello</tabTrigger>
    <!-- Optional: Set a scope to limit where the snippet will trigger -->
    <scope>source.python</scope>
</snippet>

驗證方式 : 保存自定義snippet,在python文件夾下輸入hello按下tab

3. snippet Fields


設(shè)置Fields, 可以通過tab鍵循環(huán)的改變代碼片段的一些值

<snippet>
   <content><![CDATA[
=================================
First Name: $1
Second Name: $2
Address: $3
=================================
]]></content>
    <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
    <tabTrigger>hello</tabTrigger>
    <!-- Optional: Set a scope to limit where the snippet will trigger -->
    <scope>source.python</scope>
</snippet>

驗證方式, 在python文件夾下, 輸入hello按下tab, 會出現(xiàn)已經(jīng)定義的代碼片段, 不停的按下tab會發(fā)現(xiàn)輸入光標(biāo)在$1, $2, $3的位置跳轉(zhuǎn), 跳轉(zhuǎn)順序由數(shù)字由小到大決定, Shift+Tab可以進(jìn)行向上跳轉(zhuǎn), 可以通過Esc結(jié)束跳轉(zhuǎn)

4. snippet Mirrored Fields


設(shè)置snippet鏡像區(qū)域,會使相同編號的位置同時進(jìn)行編輯

<snippet>
   <content><![CDATA[
=================================
First Name: $1
Second Name: $1
Address: $1
=================================
]]></content>
    <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
    <tabTrigger>hello</tabTrigger>
    <!-- Optional: Set a scope to limit where the snippet will trigger -->
    <scope>source.python</scope>
</snippet>

驗證方法: 在python文件中, 輸入hello按下tab,出現(xiàn)代碼片段,會出現(xiàn)三行同行編輯的光標(biāo), 這時進(jìn)行編輯可以同時進(jìn)行三行相同的編輯

5. snippet Placeholders


snippet 占位符含義類似于python的默認(rèn)參數(shù), 通過對Field做出一點修改, 可以定義Field的默認(rèn)值, 并且可以通過tab鍵可以對不同的默認(rèn)值進(jìn)行修改

<snippet>
   <content><![CDATA[
=================================
First Name: ${1:Guillermo}
Second Name: ${2:López}
Address: ${3:Main Street 1234}
User name: $1
Environment Variable : ${4:$TM_FILEPATH }  #可以設(shè)置默認(rèn)占位符為環(huán)境變量
Test: ${5:Nested ${6:Placeholder}}
=================================
]]></content>
    <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
    <tabTrigger>hello</tabTrigger>
    <!-- Optional: Set a scope to limit where the snippet will trigger -->
    <scope>source.python</scope>
</snippet>

驗證方式: 在pyton文件中輸入hello,然后按下tab, 輸入代碼片段后, 兩個$1的field可以同時修改默認(rèn)值, 然后繼續(xù)按下tab鍵可以修改$2的默認(rèn)值..., 還可以占位符設(shè)置嵌套

寫到這里基本上大家都應(yīng)該可以根據(jù)需求編寫簡單的snippet了, 恭喜你..

6. snippet Substitutions


高級應(yīng)用可以使用Perl的正則表達(dá)式

最后送上簡單的python的snippet

<snippet>
    <content><![CDATA[
"""

文檔注釋

Args : 
    ${1}:

Returns : 
    ${2}:

Raises : 
    ${3}:

"""
]]></content>
    <tabTrigger>"""</tabTrigger>
    <scope>source.python</scope>
    <description>Documentation Comments</description>
</snippet>

###
<snippet>
    <content><![CDATA[def ${1:foo}():
    doc = "${2:The $1 property.}"
    def fget(self):
        ${3:return self._$1}
    def fset(self, value):
        ${4:self._$1 = value}
    def fdel(self):
        ${5:del self._$1}
    return locals()
$1 = property(**$1())$0]]></content>
    <tabTrigger>property</tabTrigger>
    <scope>source.python</scope>
    <description>New Property</description>
</snippet>

7. 拓展閱讀和參考鏈接


Snippets
Syntax Definitions
Perl Regular Expression Syntax
Boost-Extended Format String Syntax

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內(nèi)容