如何防止“。”(点)取消 Sublime Text 2 中的自动完成功能?

Posted

技术标签:

【中文标题】如何防止“。”(点)取消 Sublime Text 2 中的自动完成功能?【英文标题】:How to prevent "."(dot) from cancelling autocomplete in Sublime Text 2? 【发布时间】:2013-03-19 00:43:12 【问题描述】:

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

 "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”时,我看到了正确的自动完成选项:

但只要我输入“.”(点)自动完成选项就会消失:

有没有办法改变这种行为?我只是希望将关键字作为一个整体来处理并忽略点。

谢谢!

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

我注意到我可以做“utiltoday”,但如果可能的话,我想改变点的行为。有什么配置可以实现吗? @fedxc - 我从未见过任何配置选项处理这个问题,它可能是硬编码的。【参考方案2】:

我到处寻找,似乎自动完成代码嵌入在可执行文件本身中(至少在 Windows 上,我还没有检查我的 Mac),而不是在众多外部 @ 之一987654326@ 文件散落在各处,所以我什至看不到如何执行自动完成的参数。我查看了默认的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。

所以,我想目前你无能为力。您可以随时留下feature request,看看它是否进入Sublime Text 3,或者在Sublime Text Forum 上搜索/打开一个线程,看看是否有其他人有任何建议。祝你好运!

【讨论】:

感谢您的回答!我接受了这个投入的时间:D 有一个解决方案,很简单。请参阅下面的答案。【参考方案3】:

我认为@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 将被选中。

如果我能澄清任何事情,请告诉我。

【讨论】:

【参考方案4】:

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

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"
    
]

【讨论】:

不错!我一直在寻找类似“auto_complete_triggers”的东西。【参考方案5】:

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

// 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/

【讨论】:

这不会出现在键绑定中,它会出现在用户首选项中。此外,花括号不是必需的。

以上是关于如何防止“。”(点)取消 Sublime Text 2 中的自动完成功能?的主要内容,如果未能解决你的问题,请参考以下文章

sublime text 3如何取消自动换行?

如何防止 Sublime Text 2 吞下右括号、引号和圆括号?

取消sublime text 3更新

sublime text3 取消显示路径path的方法

Sublime Text3取消自动补全结束标签

sublime text 3 安装插件和取消启动检查更新