3

我为我在工作中使用的专有语言定义了一些关键字:

{ "match": "\\b(util.tickettimelimit|util.user_ip|util.server_name|util.today)\\b",
  "name": "keyword.source.GTX2",
    "comment": "Tags"
}

我还有一个完成文件:

{
  "scope": "source.GTX2",

  "completions":
  [
    "util.server_name",
    "util.tickettimelimit",
    "util.today",
    "util.user_ip"
  ]
}

当我开始输入“util”时,我看到了正确的自动完成选项:

自动完成工作正常

但是一旦我输入“。”(点)自动完成选项就会消失:

自动完成功能无法按预期工作

有没有办法改变这种行为?我只想将关键字作为一个整体来处理,而忽略这些点。

谢谢!

4

5 回答 5

2

我到处寻找,似乎自动完成代码嵌入在可执行文件本身中(至少在 Windows 上,我还没有检查我的 Mac),而不是.py分散在众多外部文件之一中,所以我什至看不到如何执行自动完成的参数。我查看了默认Packages/Default/Preferences.sublime-settings文件,虽然有几个与自动完成相关的选项,但没有一个与我们正在寻找的内容相关。在查看Default (Windows).sublime-keymap同一目录中的文件时,我尝试添加以下内容:

{ "keys": ["."], "command": "hide_auto_complete", "context":
    [
        { "key": "auto_complete_visible", "operator": "equal", "operand": false }
    ]
},

但可惜它没有用。那里有许多auto_complete命令,虽然这看起来最有希望,但我还没有尝试过其余的命令。

我没有详尽地查看漂亮的SublimeCodeIntel插件(也可以通过Package Control获得)的源文件和配置文件,因此您可能可以在那里找到一个选项。您可能必须首先完全禁用内置的自动完成功能,因此它不会覆盖 SCI。

所以,我想现在你能做的不多。你可以随时留下一个功能请求,看看它是否进入了Sublime Text 3 ,或者在Sublime Text 论坛上搜索/打开一个线程,看看其他人是否有任何建议。祝你好运!

于 2013-03-28T18:02:40.850 回答
2

我认为@Ashish 暗指的是word_separators设置。您将需要创建一个特定于语法的首选项 ( Preferences -> Settings - More -> Syntax Specific - User)。创建一个word_separators删除点的条目(从默认首选项复制作为基础)。这会给你你想要的行为,但有一些事情需要注意。显然,点不会被视为单词分隔符,这会改变一些行为。

我将以 java 为例。如果我有一个变量foo,使用某种方法bar,我可以输入foo.bbar显示为完成。如果没有点作为分隔符,您将看不到这一点。

另一个可能更容易理解的例子是在选择单词时。如果您使用 ctrl/cmd + d 选择单词,它会选择单词,由单词分隔符绑定。所以如果我有foo.ba|r,在哪里| 表示光标位置并使用 ctrl/cmd+d 它将选择bar. 删除点作为单词分隔符后,foo.bar将被选中。

让我知道我是否可以澄清任何事情。

于 2013-03-28T21:41:38.347 回答
1

有点晚了,但我希望这会有所帮助,创建一个新插件并添加以下代码:

import re


myObjects = {"util": ["server", "tickettimelimit", "today", "user_ip"]}


class CustomAutocomplete(sublime_plugin.EventListener):
    def on_query_completions(self, view, prefix, locations):
        if not view.match_selector(0, "source.GTX2"):
            return

        if prefix == "":
            # get the last word in the current line
            currentposition = view.sel()[0].begin()
            currentline = view.full_line(currentposition)
            text = view.substr(currentline)
            words = re.findall("\w+", text)
            lastword = words[-1]

            if lastword in myObjects.keys():
                # return a list of tuples, it represents snippets
                # the first element is the trigger and the second one
                # is the content
                return [(x, x) for x in myObjects[lastword]]

        return []

并在用户设置中添加下一个键:

"auto_complete_triggers":
[
    {
        "characters": ".",
        "selector": "source.GTX2"
    }
]
于 2013-08-23T00:27:50.010 回答
0

不要按。(点)否则您需要在点之后输入至少一个字符,以便列表可以再次出现。使用括号或点告诉 Sublime Text 2 用户已完成输入。

例如:如果我输入forsublime 将显示下拉列表,但如果我输入for(列表将消失。

于 2013-03-28T14:25:53.630 回答
0

单击首选项>设置-用户,然后复制并粘贴以下内容

// Characters that are considered to separate words – does not include periods.
// Place comma at the end of the line if there are multiple keybindings.
"word_separators": "/\\()\"‘-:,;~!@#$%^&*|+=[]{}`~?"

从这个网页: http ://tomschenkjr.net/using-sublime-text-2-for-r/

于 2014-02-28T21:35:39.957 回答