【问题标题】:Writing an autocomplete plugin in Sublime Text在 Sublime Text 中编写一个自动完成插件
【发布时间】:2018-02-22 16:35:29
【问题描述】:

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

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

作为说明:我可以用 Python 编程,并使用过其他 Sublime 功能,例如 sn-ps,但这些包似乎比我觉得必要的要复杂得多。)

【问题讨论】:

    标签: sublimetext3 sublime-text-plugin


    【解决方案1】:

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

    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
    

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

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

    【讨论】:

      猜你喜欢
      • 2017-10-13
      • 2012-06-20
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      相关资源
      最近更新 更多