Scripted 编辑器的简单模板

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

我们最近发布了 0.3 版Scripted 编辑器,并且我们正在快速推进下一个版本的开发。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 目录中。在 macOS 上,此文件可以在此处找到:${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 指的是将触发补全出现在建议列表中的文本。内容部分是将替换触发器的文本。$1$2 等指的是编辑时的制表位。制表位可以这样命名 ${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 中可用,但要使用本文档中描述的所有功能,您应该从Github 上的 Scripted 存储库的主分支开始。

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

获取 Spring Newsletter

关注 Spring Newsletter

订阅

领先一步

VMware 提供培训和认证,助您快速提升。

了解更多

获取支持

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

了解更多

即将举行的活动

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

查看全部