如何在不使用completionItem / autocomplete的情况下插入代码段

时间:2018-03-06 12:07:15

标签: monaco-editor

我想以编程方式动态插入一个代码段(例如<foo attr="$1">$2</foo>。检查文档似乎是使用代码段的唯一方法是在完成项提供程序中(使用kind: monaco.languages.CompletionItemKind.Snippet返回完成项我找到了一个SnippetString界面,但唯一支持它的地方是CompletionItem

我也想知道也许我可以通过编程方式触发CompletionItem,但我找不到办法。我尝试使用editor.executeEdits()您可以传递操作标识符,但我没有找到识别CompletionItem的方法。

2 个答案:

答案 0 :(得分:1)

您可以在编辑器中模拟键入代码段为:

    let text = "foo"; //snippet label
    this.editor.trigger('keyboard', 'editor.action.triggerSuggest', {});
    this.editor.trigger('keyboard', 'type', {text: text});
    setTimeout(() => {
        this.editor.trigger('editor', 'acceptSelectedSuggestion', {});
    }, 100);

编辑器加载摘要所需的setTimeout

答案 1 :(得分:0)

当用户执行某种手势/按键组合时,注册一个自定义动作或自定义命令并添加文本呢?参见:

我认为代码完成是正确的方法。为什么不使用它? https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-completion-provider-example