如何从 Sublime Text 4 自动完成列表中删除当前缓冲区中的单词

How to remove words in the current buffer from Sublime Text 4 autocomplete list

提问人:Jeff 提问时间:1/14/2022 最后编辑:Jeff 更新时间:1/24/2022 访问量:189

问:

在过去的 8 年左右的时间里,这个插件在 Sublime Text 2 和 3 中工作得很好,可以从 + 自动完成列表中删除当前缓冲区中的单词,但它在 ST4 (b4126) 中不再有效:ctrlspace

import sublime, sublime_plugin

class MyAutocomplete(sublime_plugin.EventListener):
  def on_query_completions(self, view, prefix, locations):
    # Popup autocomplete only for .sublime-snippet and
    # .sublime-completions files
    return ([], sublime.INHIBIT_WORD_COMPLETIONS)

我知道并且仍然有效,所以我认为问题出在数组返回语句上。文档不显示版本之间的任何更改。on_query_completionssublime.INHIBIT_WORD_COMPLETIONS

我能够使用的 return 语句的唯一变体是这个,但现在我在我不想要的列表中有一个额外的完成:sublime.INHIBIT_WORD_COMPLETIONS

return [
  sublime.CompletionItem(
    trigger="fox",
    completion="The quick brown fox jumps over the lazy dog",
    kind=sublime.KIND_KEYWORD
  )
], sublime.INHIBIT_WORD_COMPLETIONS

根本没有运气sublime.CompletionListset_completions

python sublime-text-plugin sublimetext4

评论


答:

1赞 Keith Hall 1/24/2022 #1

似乎不可能在不返回至少一个完成的情况下禁止缓冲区/字完成。但是,如果该完成(触发器和结果)是单个字符,则它永远不会相关,因此永远不会显示自动完成。

import sublime, sublime_plugin


class InhibitWordCompletionsEventListener(sublime_plugin.EventListener):
    def on_query_completions(self, view, prefix, locations):
        clist = sublime.CompletionList()
        sublime.set_timeout(lambda: clist.set_completions([' '], sublime.INHIBIT_WORD_COMPLETIONS), 0)
        return clist

(注意:部分基于对 https://github.com/sublimehq/sublime_text/issues/4999 的评论,这是我在搜索查看是否为此报告了错误时发现的。

评论

0赞 Jeff 1/24/2022
是的,这一定是个错误。您的在我的 ST4 安装中按预期工作。