Scripted 编辑器的简单模板

工程 | Andrew Eisenberg | 2013年1月23日 | ...

我们最近发布了 Scripted 编辑器的 0.3 版本,并且正在快速推进下一个版本的开发。Scripted 编辑器 0.4 的主要目标之一是可扩展性,而可扩展性的其中一部分是一个简单、可扩展的模板机制(另一部分是一个强大的插件模型,将在未来的博文中介绍)。在这篇博文中,我将介绍 Scripted 编辑器的自定义代码完成和模板。

Sublime Text 是一款出色的通用编辑器。它高度可配置,许多 Scripted 用户也使用 Sublime。因此,我们希望让 Sublime 的扩展在有意义的地方与 Scripted 兼容。其中一个领域是 sublime-completions 文件。这些文件指定了给定内容类型(通常映射到文件扩展名)的完成列表。Scripted 允许您原样使用这些完成文件,并提供了一些额外的功能。

首先,我将解释如何使用现有的 sublime-completions 文件,然后将展示如何创建新的文件,最后我将展示我们在 Sublime Text 支持的功能之上添加的一些额外功能,以及这些功能如何在编辑器中体现出来。

使用现有的完成文件

只需将您的 *.sublime-completions 文件重命名为 *.scripted-completions 并将它们放入您的 ${user.home}/.scriptedrc 目录中。完成文件也存在于 scripted/completions 目录中,但这些完成是由 Scripted 本身提供的,并且会在每次升级时被覆盖。

举个例子

  1. 将 Sublime Text 发行版中的 PHP.sublime-completions 文件放入您的 .scriptedrc 目录中。在 mac 上,此文件位于 ${HOME}/Library/Application Support/Sublime Text 2/Packages/PHP/PHP.sublime-completions
  2. 将其重命名为 PHP.scripted-completions
  3. 重启 Scripted 服务器(在命令行运行 scr -r)以加载新文件(记住...Scripted 是一个 node 应用)
  4. 刷新编辑器页面并打开一个 php 文件。
  5. 内容辅助现在将在您的编辑器中显示新的 PHP 完成。
您会看到类似这样的内容

选择一个建议会显示如下内容

就这么简单。

创建您自己的完成文件

让我们以 PHP 完成的简化部分为例

第一行是 scope,由 Sublime 和 Scripted 用于确定完成激活的上下文。Scripted 只识别范围中第一个词的文件扩展名(例如,php)来确定这些完成在哪些类型的文件中是活动的。Sublime 对范围有更复杂的概念,Scripted 尚未实现(或暂时未实现)。接下来是完成数组。一个简单的字符串元素(例如,php)如果前缀匹配,将把该条目添加到内容辅助建议列表中。稍微复杂一些的是带有 triggercontents 的条目。trigger 指的是将触发完成出现在建议列表中的文本。content 部分是用来替换触发文本的文本。$1$2 等指的是编辑时的 tab 停靠点。tab 停靠点可以像这样命名 ${1:text}$0 是退出位置,即按下 Enter 键后插入符将跳转到的位置。如果未指定,退出位置默认为完成的最后一个字符之后。需要注意 sublime-completions 和 scripted-completions 之间的一些区别:

  1. Scripted 不识别范围中的分区。Scripted 只识别文件扩展名。
  2. 我们使用 json5 解析 scripted-completions 文件,因此您可以在 JSON 文本中包含注释和未加引号的键。

文件中的任何错误都会记录在 ${TEMP}/scripted.log 文件中。关于 sublime-completions 文件格式的完整参考可在此处获取

其他功能

Scripted 提供了一些 Sublime 中没有的额外功能。

变量

您可以在内容辅助建议中包含要展开的变量。例如

内容辅助将看起来像这样

按下 Enter 将生成如下结果

目前支持的变量有:

  • ${year} 当前年份
  • ${file} 编辑器中当前文件的完整路径
  • ${dir} 当前文件的目录名
  • ${projectDir} 当前 scripted 项目的目录
  • ${selection} 编辑器中当前选中的文本
  • ${lineStart} 当前行的开头空白字符
  • ${indent} 默认为 '\t' 并且可以配置
${lineStart}${indent} 变量无需显式使用。完成中的每个 '\n' 将被替换为 ${lineStart},每个 '\t' 将被替换为 ${indent}
模板
模板是一种特殊的完成。当内容辅助在非空选择上调用时,所有模板(且仅有模板)将显示,无论前缀如何。模板可用于用代码块包围您的代码。要将完成标记为模板,请在完成中添加 isTemplate: true。例如,给定以下完成

您可以在编辑器中像这样使用它

按下 Enter 或点击,模板即被应用

请注意,格式化应用正确,使用现有空白字符来缩进代码。

当前状态

scripted-completions 的早期形式在 0.3 版本中可用,但要使用本博文描述的所有功能,您应该使用 Scripted repository on github 的 master 分支。

在撰写本文时,Scripted 提供 html 和 JavaScript 的完成,我们计划为更多语言提供建议。当然,您可以添加自己的完成。如果您想成为一个好的开源公民,请考虑为您创建的任何新的完成文件提交拉取请求。

获取 Spring 通讯

通过 Spring 通讯保持联系

订阅

先行一步

VMware 提供培训和认证,助您加速进步。

了解更多

获取支持

Tanzu Spring 在一项简单的订阅中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看全部