如何防止“。”(点)取消 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.b
,bar
将显示为完成。如果没有点作为分隔符,您将看不到这一点。
另一个可能更容易理解的例子是在选择单词时。如果您使用 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 中的自动完成功能?的主要内容,如果未能解决你的问题,请参考以下文章