在点上触发自动完成

时间:2013-03-29 06:16:56

标签: sublimetext2 sublimetext3

如果键入。(点),如何为Python作用域触发自动完成弹出窗口?


要解决@skuroda评论,我会提出问题:

如果在首选项中设置"auto_complete": true(默认情况下已设置),则在按下的任何字符上触发ST中的自动完成。我发现这最烦人,因为我不希望它按下单键时触发,所以我把它关掉了。

html_completions.py只检查哪个是当前的前一个字符,并提供完成列表,但不会更改自动完成行为或设置触发它的内容。

OTOH,有auto_complete_triggers首选项,但这并不能解决我的问题,因为它取决于auto_complete首选项:

  • 如果auto_complete首选项设置为false,则auto_complete_triggers中定义的触发器不会触发完成
  • 如果它设置为true,那么我再次按下任何键上的自动完成,而不是像大多数Python感知编辑那样在点上

另一个可接受的解决方案是,如果我可以定义一些阈值,例如4个字符,那么自动完成不会在自动按下的单个按键上显示,而是在4个字符后显示。

1 个答案:

答案 0 :(得分:1)

您可以编写一个简单的插件来获得该阈值效果。

import sublime
import sublime_plugin

class MyEventListener(sublime_plugin.EventListener):
    def on_query_completions(self, view, prefix, locations):
        if len(prefix) < 4:
            return ([], sublime.INHIBIT_WORD_COMPLETIONS | sublime.INHIBIT_EXPLICIT_COMPLETIONS)
        else:

            return []

此外,请尝试将以下内容添加到语法特定设置(Preferences -> Settings - More -> Syntax Specific - User)中。我相信它应该通过点运算符为您提供所需的行为。

"auto_complete_selector": "- source, comment",
"auto_complete_triggers": [ {"selector": "source.python", "characters": "."} ]

我只对这两种解决方案进行了最低限度的测试,所以请告诉我是否可以澄清任何内容。