Sublime Text 2 代碼片斷


原文: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>

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM