Scripted Editor 的简单模板

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

我们最近发布了 Scripted Editor 0.3,并正在快速推进下一个版本。Scripted Editor 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 只识别 scope 第一个单词的文件扩展名(例如 php)来确定这些补全在哪些类型的文件中处于活动状态。Sublime 对 scope 有更复杂的概念,这些概念尚未在 Scripted 中实现。接下来是补全数组。单个字符串元素(例如 php)会将该条目添加到内容辅助建议列表中,如果前缀匹配。稍微复杂一点的是带有 triggercontents 的条目。trigger 指的是触发补全出现在建议列表中的文本。内容部分是替换触发器的文本。$1$2 等指的是编辑时的制表位。制表位可以命名为 ${1:text}$0 是转义位置,即按下回车键后光标将跳转到的位置。如果未指定,转义位置默认为补全的最后一个字符之后。sublime-completions 和 scripted-completions 之间有一些需要注意的区别。

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

文件中的任何错误都将记录在 ${TEMP}/scripted.log 文件中。sublime-completions 文件格式的完整参考 此处提供

其他功能

Scripted 提供了一些 Sublime 中不具备的额外功能。

变量

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

内容辅助看起来会像这样

按下回车键将生成此内容

当前支持的变量有

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

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

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

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

当前状态

Scripted-completions 的早期形式在 0.3 版本中可用,但要使用此博客文章中描述的所有功能,您应该从 GitHub 上的 Scripted 存储库 的 master 分支工作。

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

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

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

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

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

查看所有