代码片段
作为一个程序员最喜欢的就是打几个字编辑器或IDE就能显示出想要的代码,可以少打很多代码,而不是整天复制代码。本人比较喜欢sublime test这个编辑器主要就是打开比较快速,当然了如果是非常大的项目还是不建议使用sublime test。也是看了sublime test的文档所以简单的书写一下这篇文章。
代码文件格式与创建
文件格式与自动读取
每个编辑器都有自己的代码片段格式,也是大同小异。sublime test的代码片段格式后缀名为.sublime-snippet的文件。一个文件代表一个代码片段提示。主要是xml格式。sublime test会自动加载Perfernces->Packages->User文件夹下的所有文件
创建snippet
Tools->Developer->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>
属性说明
content
content是我们代码片段主体,而我们要写的代码应该放入<![CDATA[和(代码写到这边)]]>之间。
tabTrigger
tabTrigger属性是简写,比如下图输入hello就一个代码提示片段:
description
description属性为代码提示说明,如上图hello的说明是first,用tools创建的文件是没有自带这个属性,所以他默认文件名。
scope
scope属性就是这个代码提示会在哪一种语法中显示,比如tools创建的默认是python那么他的值就是source.python。以下为语法与值的对应关系:
可以看出html有点奇葩可能是命名没有规范的问题还是别的用意,我是通过解sublime包找到的html对应值,当然如果要一个文件让很多语法使用可以逗号隔开比如以下代码:
<scope>source.python,source.php,text.html</scope>
语法
变量字段
一般书写代码段的时候都会通过Tab建来跳跃变量,也就是用$符号加数字如果需要展示符号$就要用"\$"代替,如以下代码:
第一个: $1
第二个: $2
第三个: $3
如果想实现$this->assign(‘parm’, $parm);那么content的内容就是如下代码(光标会同时停留在parm上可以同时书写,如果不要默认名称的话直接用$+数字):
<content><![CDATA[
\$this->assign('${1:parm}', \$${1:parm});
]]></content>
当然sublime test有自带的一些参数比如下面的对应关系($TM_FILENAME为获取本输入框对应的文件名):
=================================
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
=============================
正则
代码段肯定是要有智能识别,我们输入什么后续字段会跟着变化这才是代码段该有的样子。sublime test的格式是:
${var_name/regex/format_string/}
${var_name/regex/format_string/options}
var_name
代表第几个变量如果是第一个变量就写1,如果是环境变量如文件名的就写TM_FILENAME。
regex
正则就是匹配var_name的值。
format_string
格式化匹配出来的值
options
这个就跟正则表达式的options一样。
最后这边贴出一些官网的例子:
其中content书写为:
<content><![CDATA[
Original: ${1:Hey, Joe!}
Transformation: ${1/./=/g}
]]></content>
# Output:
Original: Hey, Joe!
Transformation: =========
Transformation: ${1/^(\w)|(?:_(\w))/(?1\u$1:)(?2 \u$2:)/g}
Original: ${1:text_in_snail_case}
# Output:
Transformation: Text In Snail Case
Original: text_in_snail_case
Transformation: ${1/^(\w)|(?:_(\w))/(?1\u$1:)(?2 \u$2:)/g}
Original: ${1:text_in_snail_case}
# Output:
Transformation: Text In Snail Case
Original: text_in_snail_case
# In file MyModule.js:
Transformation: ${TM_FILENAME/(\w+)\.js/\1/g}
# Output:
Transformation: MyModule