如何在Monaco编辑器上更改显示语言

6

我不知道如何将 JavaScript 的显示语言更改为类似 Swift(或其他语言)。

我使用了 "npm install monaco-editor" 命令进行安装。

    <script src="node_modules/monaco-editor/min/vs/loader.js"></script>
    <script>
    var editor;
    require.config({ paths: { 'vs': 'node_modules/monaco-editor/min/vs' 
    }});
    require(['vs/editor/editor.main'], function() {

        editor = 
    monaco.editor.create(document.getElementById('container'), {
            value: [
                'function x() {',
                '\tconsole.log("Hello world!");',
                '}'
            ].join('\n'),
            language: 'javascript',
            theme: "vs-dark"
        });
    });


    function showMessage() {
        var text = editor.getValue();
        monaco.editor.setModelLanguage(editor.getModel(), "swift")
        editor.updateOptions({
            language: "objective-c"
        });
        alert(text);
    }
</script>

我期望在运行showMessage函数后,显示代码从JavaScript变为Objective-C。但实际上没有显示错误信息。有人知道如何做吗?
1个回答

16

我不太确定你想做什么,但我写了这个小函数:

const changeLang = lang => {
    monaco.editor.setModelLanguage(editor.getModel(), lang);
    console.log(`model language was changed to ${editor.getModel().getLanguageIdentifier().language}`);
}

每次它会更改语言并为我打印新的模型语言。

您的代码行 editor.updateOptions({language: "objective-c"}) 不起作用。如果您查看 文档, 您将看到ITextModelUpdateOptions只接受indentSize, insertSpaces, tabSizetrimAutoWhitespace

看起来您可能一直在看此github问题的前几个答案,以制作该行代码。但第一个答案是不正确的。

您在函数开头执行了 text = editor.getValue(),并在结尾处执行了alert(text),但text从未更改。模型语言只会影响外观,而不是内容。如果您只想获取静态内容,则编写方式是正确的。但是,如果您希望其更改,则不会发生。


如果我的页面有两个 Monaco 编辑器实例,我想仅更新其中一个的语言,应该如何操作?因为使用 monaco.editor.setModelLanguage 似乎会同时更新两个实例。 - Pawan Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接