手把手教你写Sublime中的Snippet
关于如何使用Sublime text可以参考我的另一篇文章, 相信你会喜欢上的..
Sublime Text 2使用心得
1. Snippe创建,存储和格式
Snippet
可以存储在任何的文件夹中, 并且以.sublime-snippet
为文件扩展名, 默认是存储在.sublime-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
:用来引发代码片段的字符或者字符串, 比如在以上例子上, 在编辑窗口输入hello
然后按下tab就会在编辑器输出Type your snippet here
这段代码片段scope
: 表示你的代码片段会在那种语言环境下激活, 比如上面代码定义了source.python
, 意思是这段代码片段会在python语言环境下激活.description
:展示代码片段的描述, 如果不写的话, 默认使用代码片段的文件名作为描述
2. snippet环境变量
列举一下可能用到的环境变量, 这些环境变量是在Sublime中已经预定义的.
$TM_FILENAME | 用户文件名 |
$TM_FILEPATH | 用户文件全路径 |
$TM_FULLNAME | 用户的用户名 |
$TM_LINE_INDEX | 插入多少列, 默认为0 |
$TM_LINE_NUMBER | 一个snippet插入多少行 |
$TM_SOFT_TABS | 如果设置translate_tabs_to_spaces : true 则为Yes |
$TM_TAB_SIZE | 每个Tab包含几个空格 |
同一通过下面的代码片段进行验证:
<snippet>
<content><![CDATA[
=================================
$TM_FILENAME 用户文件名
$TM_FILEPATH 用户文件全路径
$TM_FULLNAME 用户的用户名
$TM_LINE_INDEX 插入多少列, 默认为0
$TM_LINE_NUMBER 一个snippet插入多少行
$TM_SOFT_TABS 如果设置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>
3. snippet Fields
设置Fields
, 可以通过tab键循环的改变代码片段的一些值
<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>
4. snippet Mirrored Fields
设置snippet镜像区域,会使相同编号的位置同时进行编辑
<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>
5. snippet Placeholders
snippet 占位符含义类似于python的默认参数, 通过对Field做出一点修改, 可以定义Field的默认值, 并且可以通过tab键可以对不同的默认值进行修改
<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 } #可以设置默认占位符为环境变量
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>
写到这里基本上大家都应该可以根据需求编写简单的snippet了, 恭喜你..
6. snippet Substitutions
高级应用可以使用Perl的正则表达式
最后送上简单的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>