ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

SnippetCaller

作者: shagabutdinov 全部

在默认Sublime Text代码片段之上的代码片段系统

详细信息

安装

  • 总数 7K
  • Win 5K
  • Mac 996
  • Linux 768
8月6日 8月5日 8月4日 8月3日 8月2日 8月1日 7月31日 7月30日 7月29日 7月28日 7月27日 7月26日 7月25日 7月24日 7月23日 7月22日 7月21日 7月20日 7月19日 7月18日 7月17日 7月16日 7月15日 7月14日 7月13日 7月12日 7月11日 7月10日 7月9日 7月8日 7月7日 7月6日 7月5日 7月4日 7月3日 7月2日 7月1日 6月30日 6月29日 6月28日 6月27日 6月26日 6月25日 6月24日 6月23日
Windows 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 2 0 1 1 0 0
Mac 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Linux 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0

README

源代码
raw.githubusercontent.com

Sublime SnippetCaller 插件

在默认Sublime Text代码片段之上的代码片段系统。这个令人惊叹的插件提供了大量有用的功能,如果你经常使用代码片段,这些功能非常有价值。

如果你还不是代码片段用户,请参阅“正确使用代码片段的方式”部分。

演示

安装

此插件是 sublime-enhanced 插件集的一部分。你可以安装 sublime-enhanced,然后此插件将自动安装。

如果你想单独安装此软件包,请检查 sublime-enhanced 软件包中的“单独安装软件包”部分。

警告

此插件与多光标不兼容:所有工作都只为第一个光标执行,然后被重复用于其他光标;它之所以如此运行,是因为Sublime的代码片段系统没有提供为不同的光标指定不同的代码片段值的方法,而此修复需要重写Sublime内部代码片段系统的完整工作方式。

此插件与补全弹出窗口(ctrl+space)不兼容,因为Sublime没有提供用于从补全弹出窗口中捕获代码片段展开的API,并且无法看到列表当前已选中的项。

此插件不支持变量正则表达式(例如 ${foo/a/b/ig})。只支持普通变量(例如 $foo 或 $bar)。

功能

  • 更好的作用域检测;例如,你可以为位于Ruby代码下的字符串编写代码片段

  • 避免作用域冲突;如果你正在编写同时针对PHP和HTML的代码片段,HTML代码片段将在PHP代码中展开;默认Sublime代码片段的工作方式如此之差是一个遗憾;但是这个插件允许你避免这种意外的行为

  • 在执行代码段前检查上下文;这是一个宝贵功能,它允许你仅在特定情况下执行代码段(例如,如果文件位于“tests”文件夹中或项目包含特定的框架,或者选择项不为空等);这允许覆盖标签触发,并为不同的代码段使用相同的触发器。

  • 在执行代码段前后执行Sublime命令;如果你的代码段需要包含外部库(例如,为Python的“re.search()”自动将“import re”添加到头部),这非常有用。

  • 在执行代码段时评估自定义Python代码,并将其结果插入到代码段的占位符中。

  • 自定义可扩展的$-占位符;默认情况下,有$indented_selection(替换Sublime的$selection,在包裹代码块时效果不佳)和$last_assigned_variable。

  • 通过快速搜索面板执行代码段,无需在文件中输入标签触发符即可执行。

  • 代码段嵌套 - 在另一个代码段正在运行时执行代码段。

  • 与“.sublime-snippet”文件的后向兼容性。

使用方法

为了让代码段与这个插件一起工作,代码段应该具有“.sublime-snippet-enhanced”或“.sublime-snippet”扩展名。所有默认代码段应能无需更改正常工作。

代码段是位于packages路径中的某个位置的XML文件。XML文件键描述

  • “snippet” - 代码段根键

  • “snippets” - 多个代码段的根键;“snippets”应包含多个“snippet”XML元素,并允许你将代码段分组到单个文件中

  • “content” - 代码段内容;允许使用${1:text}或$1和$text的占位符。数字占位符用于光标导航,符号占位符用于插入额外值;默认符号占位符有$indented_selection和$last_assigned_variable;可以使用__or_关键词($indented_selection_or_last_assigned_variable)一起使用符号占位符,以便插入第一个非空变量。请注意,美元符号“$”和反斜杠“\”应该使用反斜杠转义。

  • “tabTrigger” - 触发代码段的文本;其工作方式与默认Sublime的实现在某种程度上不同(允许在任何非单词字符后进行标签触发)

  • “scope” - 一个将检查光标下范围的正则表达式;注意,如果你想避免范围冲突,你应该指定负向前瞻(例如,对于html,“text.html(?!.*source)”将仅在html中使用,而不会在嵌入的语言中使用);注意,对于html和css,如果找不到代码段,代码段增强将回退到默认的Sublime代码段(“insert_best_completion”)。最好保留html代码段使用“.sublime-snippet-enhanced”扩展名,以避免与Sublime默认代码段系统冲突。

  • “description” - 将在快速搜索面板中显示的代码段描述

  • “context” - (JSON)在执行代码段之前将被检查的额外上下文;请检查sublime-context插件以了解如何使用上下文

  • “commands” - (JSON)与代码段一起执行的Sublime命令(与快捷键文件中使用的相同命令)的列表;代码段将在“RUN”值中执行;命令可以具有“context”键来检查是否执行此命令

  • “eval” - 使用Python的eval评估一些代码,并将结果插入到代码段中;请注意,Python的eval效果不佳,不允许你写入多于一条语句(因此不能使用变量或多行if;我没有找到更好的方法来评估Python代码并获取结果;如果你是Python专家并且知道一种方法,请告诉我,我将非常感激。

示例代码段(php yii)

<snippet>
    <content><![CDATA[
  <?= Html::encode(${1:$indented_selection}) ?>
  ]]></content>
    <tabTrigger>p</tabTrigger>
    <scope>text.html(?!.*source)</scope> 
    <description>Html::encode</description>
    <context>
      [
        // file name should contain .php at the end; does not allow snippet to
        // be executed in .erb and other similar files that have html code
        {"key": "filename", "operator": "regex_contains", "operand": "\\.php(\\.\\w+)?$"},

        // 'yii' should be listed in settings.frameworks (defined in project settings)
        {"key": "settings.frameworks", "operator": "regex_contains", "operand": "'yii'"},
      ]
    </context>
    <commands>
      [
        // ensure "use yii\\helpers\\Html;" is in beginning of file
        {
          "command": "create_keyword",
          "args": {"keyword_type": "php.use", "keyword": "yii\\helpers\\Html"},
        },
        "RUN",
      ]
    </commands>
  </snippet>

示例类代码段(ruby)

<snippet>
    <content><![CDATA[
  class $class

  end
  ]]></content>
    <tabTrigger>C</tabTrigger> 
    <scope>source.ruby(?!.*source)</scope>
    <description>class</description>
    <eval><![CDATA[
  {'class': view.file_name() and __import__('re').sub(r'^.*/(.*)\.\w+$', '\\1', view.file_name()).title() or ''}
    ]]></eval>
  </snippet>

用于调试的print代码段(php)非常有帮助

<snippet>
    <content><![CDATA[
  var_dump($last_assigned_variable);
  ]]></content>
    <tabTrigger>v</tabTrigger>
    <scope>source.php(?!.*source)</scope>
    <description>var_dump</description>
  </snippet>

正确使用代码段的方法

代码段是开发者最强大的工具之一,它可以大幅度减少平淡的键入,使开发者能够专注于解决当前任务,而不是键入。

我认为大多数人使用代码片段的方法不正确。通常人们会输入“while”后再按“tab”键,得到“while($1) { $2 }”。即使这样做可以明确代码片段,但完整输入“while”并没有任何收益。如果你经常使用“while”,运行代码片段的正确方法是在“w”后按“tab”,这时候才能体会到实际的好处。

如果你审查一下你的代码,你会发现有些词语在代码中经常出现,没有必要反复手动输入这些词语。让编辑器来处理这些非唯一内容的输入(或常见任务的自动化)。人类应该关心告诉编辑器做什么,而不是代替编辑器完成工作。结合sublime-autocompletion插件,可以减少到只输入程序中的唯一内容。非唯一内容可以由编辑器来完成。

代码片段应该易于使用,但不一定要明确。这就像记者的缩写对程序员。你输入两个字符,就得到三十个字符。或者得到一些有价值的执行结果,比如插入类名或者完成一些有用的工作。随着时间的推移,使用代码片段变得自动化,所以不需要担心不熟悉的tab触发。

甚至代码片段系统的创建者也把一些长而无效的tab触发作为示例。

所以我的建议是:将你的代码片段映射到1-3个字符的tab触发,并使其智能化。我将尝试通过提供有用的东西,如“last_assigned_variable”,来帮助你完成这项工作。

命令

说明 键盘快捷键
插入代码片段或转到下一个字段 tab
显示代码片段调用面板 ctrl+\

依赖项

对于“last assigned variable”代码片段的变量