【问题标题】:Show Monaco completion list even if there are no matches即使没有匹配项也显示摩纳哥完成列表
【发布时间】:2019-12-08 00:05:44
【问题描述】:

我为 Monaco 编辑器定制了一个 CompletionItemProvider。 即使没有匹配项,是否可以强制摩纳哥显示完成列表?

例如,假设我总是提供两个完成项:abcdef

  • 如果用户输入a,则显示abc
  • 如果用户输入d,则显示def
  • 但如果用户键入z,则根本不会显示任何内容。默认情况下这是有道理的。 但是我怎样才能让abcdef 都出现在这种情况下呢?

用例是我们的用户可能不知道使用 ctrl+space 来触发完成,因此即使没有匹配项,我们也希望显示完成列表,以便用户可以探索选项并可能更正自己。

【问题讨论】:

    标签: visual-studio-code vscode-extensions monaco-editor


    【解决方案1】:

    每次用户键入字母时都会调用您的完成提供程序。假设您构建了一个超级简单的提供程序,每次调用它时只返回 ['abc', 'def']。

    在这种情况下,你会得到你观察到的行为。为什么?因为触发提供者的是用户键入“a”或“d”或“z”或其他内容。如果他们输入'a',你只会看到'abc',如果他们输入'd',你只会看到'def',如果他们输入'z',你什么也得不到

    如果您愿意,可以指定另一个触发字符,如空格或“.”这将打开整个列表。

    monaco.languages.registerCompletionItemProvider('javascript', {
        triggerCharacters: ['.', ' '],
        provideCompletionItems: ...
      });
    

    【讨论】:

    • 不确定它是如何工作的。无论用户键入什么,都会始终调用完成提供程序。因此,如果用户键入“o”或“z”,provideCompletionItems() 就会被调用。我总是从函数中返回 ['abc', 'def'] ,但是这些值稍后会被 Monaco 过滤掉,因为它们与已经输入的 'o' 或 'z' 不匹配。您可以在playground 中进行测试。如果添加 triggerCharacters: ['o'] 并键入 'o',则不会显示完成项。
    • triggerCharacters: [' '], 添加到操场示例中。点击“运行”,然后在该 json 示例中键入一个空格。您会看到所有可能的自动完成功能都打开了。
    • 是的,空格仅显示所有可能的自动完成,因为光标下没有“当前”单词。所以完成列表不会过滤自己。如果您更改为triggerCharacters: ['z'],,则不会显示自动完成,因为它们都没有以“z”开头。这就是我需要的 - 在输入“z”时显示所有自动完成。
    • 哦,那我误解了这个问题。在 Playground 中,您可以将 filterText 参数添加到完成结果列表中。尝试filterText: 'z"lodash": "*"' 在过滤器文本中输入“z”,然后它会被匹配并打开列表。在您的示例中,它将是 filterText: 'zabc'filterText: 'zdef'
    • 谢谢,这实际上可能有效。但是我需要根据用户输入的内容动态调整 filterText 。例如,如果用户键入“zxc”,那么所有完成项都应该有以 zxc 开头的 filterText :) 我希望有一种更简单的方法来配置它,但似乎真的没有......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 2022-09-29
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 2023-01-18
    • 2018-11-09
    相关资源
    最近更新 更多