【问题标题】:How to prevent "."(dot) from cancelling autocomplete in Sublime Text 2?如何防止“。”(点)取消 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”时,我看到了正确的自动完成选项:

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

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

谢谢!

【问题讨论】:

    标签: autocomplete sublimetext2


    【解决方案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/

      【讨论】:

      • 这不会出现在键绑定中,它会出现在用户首选项中。此外,花括号不是必需的。
      猜你喜欢
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多