subl: snippet

https://www.jianshu.com/p/356bd7b2ea8e

下载APP
搜索
手把手教你写Sublime中的Snippet

Andrew_liu
手把手教你写Sublime中的Snippet

Andrew_liu
0.221
2014.12.10 22:16:30
字数 914
阅读 22,782
Sublime Text号称最性感的编辑器, 并且越来越多人使用, 美观, 高效

关于如何使用Sublime text可以参考我的另一篇文章, 相信你会喜欢上的..
Sublime Text 2使用心得

现在介绍一下Snippet, Snippets are smart templates that will insert text for you and adapt it to their context. Snippet 是插入到文本中的智能模板并使这段文本适当当前代码环境. 程序员总是会不断的重写一些简单的代码片段, 这种工作乏味/无聊, 而Snippet的出现会让Code更加高效.

1. Snippe创建,存储和格式
(这里snippet称作代码片段)

Snippet可以存储在任何的文件夹中, 并且以.sublime-snippet为文件扩展名, 默认是存储在.sublime-snippet文件夹下.

Snippet文件是以.sublime-snippet为扩展的XML文件, 可以命名为XXX.sublime-snippet, 创建自己的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:用来引发代码片段的字符或者字符串, 比如在以上例子上, 在编辑窗口输入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>
验证方式 : 保存自定义snippet,在python文件夹下输入hello按下tab

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>
验证方式, 在python文件夹下, 输入hello按下tab, 会出现已经定义的代码片段, 不停的按下tab会发现输入光标在$1, $2, $3的位置跳转, 跳转顺序由数字由小到大决定, Shift+Tab可以进行向上跳转, 可以通过Esc结束跳转

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>
验证方法: 在python文件中, 输入hello按下tab,出现代码片段,会出现三行同行编辑的光标, 这时进行编辑可以同时进行三行相同的编辑

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>
验证方式: 在pyton文件中输入hello,然后按下tab, 输入代码片段后, 两个$1的field可以同时修改默认值, 然后继续按下tab键可以修改$2的默认值..., 还可以占位符设置嵌套

写到这里基本上大家都应该可以根据需求编写简单的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>
7. 拓展阅读和参考链接
Snippets
Syntax Definitions
Perl Regular Expression Syntax
Boost-Extended Format String Syntax

"小礼物走一走,来简书关注我"
  
  
Andrew_liu
重度强迫症患者 软件...
总资产9 (约0.95元)共写了3.2W字获得2,256个赞共3,139个粉丝

 

写下你的评论...
全部评论
12

EternalFire
10楼 2017.08.16 14:24
在sublime text 3里, 是通过这种方式新建Snippet:

Tools -> Developer -> New Snippet

:blush:

lerko_
9楼 2017.08.11 14:27
推荐一个插件叫snipetmaker,可以快速写snippet

EternalFire
2017.08.16 14:25
少写了个字母p吧......

lerko_
2017.08.18 09:13
@EternalFire :joy: 这都被你发现了

鳗鱼饭_吃
8楼 2016.10.07 18:27
mark

乔其纱
7楼 2015.11.19 09:11
:progid:

乔其纱
6楼 2015.11.19 09:10
:progid:

Andrew_liu
5楼 2014.12.11 09:49
@CharlesTang dash有在用, 但主要是用来查文档. 不太爱用IDE, 更喜欢简洁的编辑器,然后自己我往上加功能, 就是爱折腾 - :stuck_out_tongue_winking_eye:

CharlesTang
4楼 2014.12.11 09:18
这种东西背限制在一个编辑器里,还是有点弱的,如果用Mac可以看看dash的相同功能。非常好用,系统全局触发。而且所有主流IDE都有这个功能。
另一方面,我觉得,这个功能有点反人类,竟然需要背出来所有的触发词才能愉快的使用这个功能,但是,这就跟设置了密码老是忘一个道理……

will2yang
2017.11.10 08:44
没dash 方便就没dash方便强行反人类 为什么要snippet 只是因为经常要敲重复代码 重复代码都记不住。。。

Andrew_liu
3楼 2014.12.11 08:49
@挂瓜 还好吧, xml也就做个格式, 主要还是自己写下逻辑, 不是太难 :relaxed:

挂瓜
2楼 2014.12.10 23:10
有事没事用xml,看的我很头疼。
被以下专题收入,发现更多相似内容

Pythone...

代码改变世界

编程工具

程序员

Sublime...

技术硬通货

Sublime
推荐阅读
更多精彩内容
转载:Sublime Text 全程指南
Sublime Text 全程指南 2014年 9月27日|评论 作者:Lucida 微博:@peng_gong ...

raincoat
阅读 4,079
评论 5
赞 70

Sublime Text 全程指南
转载自:http://lucida.me/blog/sublime-text-complete-guide/ Su...

东引瓯越
阅读 3,890
评论 3
赞 80

Sublime Text 插件介绍合集
转战vscode 20170829 Sublime Text 插件介绍合集 1 Emmet 功能:编码快捷键,前端...

小小游轮
阅读 1,524
评论 0
赞 7
值得收藏!神级代码编辑器 Sublime Text 全程指南
原文地址http://mdsa.51cto.com/art/201507/484183_all.htm 本文系统全...

不负如来不负亲
阅读 4,521
评论 4
赞 63

Sublime Text 3 配置和使用方法
下载:Sublime Text 3 官方下载地址Sublime Text 3 汉化破解版 资料:Sublime T...

追风逸少丶
阅读 5,030
评论 0
赞 2
广告

Andrew_liu
总资产9 (约0.95元)
Scala入门笔记
阅读 2,831
Atom开箱指南
阅读 10,372
推荐阅读
VsCode 自定义代码片段变量说明
阅读 291
协方差矩阵和散布(散度)矩阵
阅读 147
CleanMyMac X v4.6.0 for Mac-TNT中文完美破解版(附激活码)
阅读 2,075
台大李宏毅机器学习公开课2020版登陆B站
阅读 2,685
H5小游戏合集
阅读 250
广告
写下你的评论...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章