Sublime Snippet

从大二开始就一直使用 Sublime Text 到现在,各方面都还满意,也尝试过使用 Atom 和其他的 IDE 依然感觉没有 ST 顺手。

正常情况插件里面已经包含了所有你需要的 Snippet,但是偶尔会有没有插件里面没有覆盖到的部分。

然后日常开发一直在用某偏门语言(ノ▼Д▼)ノ,并且几年前对应的扩展插件就已经停止维护了,因此很多的关键字都没能进行Snippet引用。

怎么办?

废话!自己写!

新建 Snippet

首先新建一个 Snippet: 菜单->Tools->Developer->New 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>

这里包含 4 个部分:

  • content:

    其中必须包含****,否则无法工作, Type your snippet here 用来写你自己的代码片段

    注意里面一些特殊字符可能需要使用转义符号

  • tabTrigger:

    用来引发代码片段的字符或者字符串, 比如在以上例子上, 在编辑窗口输入 hello 然后按下 tab 就会在编辑器输出 Type your snippet here 这段代码片段

  • scope:

    表示你的代码片段会在那种语言环境下激活, 比如上面代码定义了 source.python, 意思是这段代码片段会在 python 语言环境下激活.

  • description :

    展示代码片段的描述, 如果不写的话, 默认使用代码片段的文件名作为描述

环境变量

点击这里查看所有环境变量列表

将环境变量插入 content 中就会输出对应的值:


=================================
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
=============================

Fields

当你输入一段 snippet 的时候,可能里面有一些参数需要手动输入,设置 Filed 就是为了方便后续参数的输入

content 中输入下方代码,然后使用这段 Snippet 的时候,就可以通过 Tab 键对下方编号位置的文字进行快速输入


=================================
First Name: $1
Second Name: $2
Address: $3
=================================

Mirror Fields

可以将对应编号改为相同的,这样可以快速选中多个位置并且输入相同的字符


=================================
First Name: $1
Second Name: $1
Address: $1
=================================

Placeholder

没啥好说的,就是给一些地方设置默认值


=================================
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}}
=================================

Substitutions

某种类型的字符转换

在 content 中使用以下格式的段落可以实现对字符串的转换:


${var_name/regex/format_string/}
${var_name/regex/format_string/options}

下方是一个例子:


        Original: ${1:Hey, Joe!}
        Transformation: ${1/./=/g}

        # Output:
        Original: Hey, Joe!
        Transformation: =========

其中定义了两个mirror fields并且第一个 field 的默认值为 Hey, Joe!然后第二个被表达式转换成了多个等于号

相关转换参考: Boost library documentation for regular expressions

scope

  • 对于 Sublime Text 3:

    可以从 : 菜单->Tools->Developer->Show Scope Name 中查看到需要操作的 Scope

  • 对于 Sublime Text 2:

    使用ctrl+` 进入控制台,然后输入string.other.link.title.markdown meta.link.inline.markdown meta.paragraph.markdown text.html.markdown

    那么对应 Scope 就会复制到剪贴板了。

参考文献