在 Sublime Text 中编写自动完成插件

gue*_*ser 2 sublimetext3 sublime-text-plugin

在我的公司内,我们有一个基于 XML 的表示法。在其他功能中,可以定义从一个 XML 文档到另一个 XML 文档的引用。我想在 Sublime 中启用自动完成功能,这样每当我添加引用时,可能的文件(即同一项目中的 XML 文件)和链接点(即该文件中的符号)都会作为建议提供。

到目前为止,我已经找到了很多可以为 HTML、PHP 或 LaTeX 启用自动完成功能的插件。但是,我觉得代码库对于一个稍微简单的任务来说太复杂了。例如,是否有一些基于作为参数接收的任意数组生成完成的普通函数?我会创建逻辑来确定什么是符号并导出所述数组,但整个过程对我来说似乎有些麻烦。

请注意:我可以用 Python 进行编程,并尝试过其他 Sublime 功能,例如代码片段,但这些包似乎比感觉要复杂得多。)

r-s*_*ein 5

创建完成条目的基础并不复杂。您现在需要用正确的值填充数组(这可以通过项目设置或解析其他文件来完成)。

import sublime
import sublime_plugin


# Your array, which contains the completions
arr = ["foo", "bar", "baz"]


class MyCompletionsListener(sublime_plugin.EventListener):
    def on_query_completions(self, view, prefix, locations):
        loc = locations[0]

        # limit you completions scope
        if not view.score_selector(loc, "text"):
            return

        completions = [(v + "\tYour Description", v) for v in arr]

        return completions
Run Code Online (Sandbox Code Playgroud)

OP 的说明:答案如宣传的那样有效。但是,集成是如此无缝,以至于我一度认为缺少某些东西。如果上面的 Python 脚本位于正确的文件夹中,则将建议完成数组返回的所有完成(取决于 Sublime 设置,可能需要使用 触发完成菜单Ctrl+Space)。另外值得注意的是:

  • completions可以是None,在这种情况下,它们只是不添加任何完成选项,或者2元组,其中第一元素是描述(其将在下拉菜单中显示,并触发完成时)的阵列和所述第二个是值(即如果选择完成将输入的文本)。
  • score_selector方法可用于确定光标位置是否在给定的scope.