先行一步
VMware 提供培训和认证,助您加速进步。
了解更多我们最近发布了 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 本身提供的,并且会在每次升级时被覆盖。举个例子
PHP.sublime-completions
文件放入您的 .scriptedrc
目录中。在 mac 上,此文件位于 ${HOME}/Library/Application Support/Sublime Text 2/Packages/PHP/PHP.sublime-completions
PHP.scripted-completions
。scr -r
)以加载新文件(记住...Scripted 是一个 node 应用)选择一个建议会显示如下内容
就这么简单。
让我们以 PHP 完成的简化部分为例
第一行是 scope
,由 Sublime 和 Scripted 用于确定完成激活的上下文。Scripted 只识别范围中第一个词的文件扩展名(例如,php
)来确定这些完成在哪些类型的文件中是活动的。Sublime 对范围有更复杂的概念,Scripted 尚未实现(或暂时未实现)。接下来是完成数组。一个简单的字符串元素(例如,php
)如果前缀匹配,将把该条目添加到内容辅助建议列表中。稍微复杂一些的是带有 trigger
和 contents
的条目。trigger
指的是将触发完成出现在建议列表中的文本。content 部分是用来替换触发文本的文本。$1
、$2
等指的是编辑时的 tab 停靠点。tab 停靠点可以像这样命名 ${1:text}
。$0
是退出位置,即按下 Enter 键后插入符将跳转到的位置。如果未指定,退出位置默认为完成的最后一个字符之后。需要注意 sublime-completions 和 scripted-completions 之间的一些区别:
文件中的任何错误都会记录在 ${TEMP}/scripted.log
文件中。关于 sublime-completions 文件格式的完整参考可在此处获取。
Scripted 提供了一些 Sublime 中没有的额外功能。
您可以在内容辅助建议中包含要展开的变量。例如
内容辅助将看起来像这样
按下 Enter 将生成如下结果
目前支持的变量有:
${year}
当前年份${file}
编辑器中当前文件的完整路径${dir}
当前文件的目录名${projectDir}
当前 scripted 项目的目录${selection}
编辑器中当前选中的文本${lineStart}
当前行的开头空白字符${indent}
默认为 '\t' 并且可以配置${lineStart}
和 ${indent}
变量无需显式使用。完成中的每个 '\n' 将被替换为 ${lineStart}
,每个 '\t' 将被替换为 ${indent}
。您可以在编辑器中像这样使用它
按下 Enter 或点击,模板即被应用
请注意,格式化应用正确,使用现有空白字符来缩进代码。
scripted-completions 的早期形式在 0.3 版本中可用,但要使用本博文描述的所有功能,您应该使用 Scripted repository on github 的 master 分支。
在撰写本文时,Scripted 提供 html 和 JavaScript 的完成,我们计划为更多语言提供建议。当然,您可以添加自己的完成。如果您想成为一个好的开源公民,请考虑为您创建的任何新的完成文件提交拉取请求。