如何在摩纳哥编辑器中设置行尾

问题描述 投票:0回答:4

默认为 CRLF。 我想将其更改为 LF,因为我正在处理 BASH 脚本。 请帮忙。

我已浏览文档,但找不到任何解决方案或示例。

monaco-editor
4个回答
2
投票
//https://github.com/Microsoft/vscode/blob/013501950e78b9dde5c2e6ec3f2ddfb9201156b7/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBufferBuilder.ts#L30
code = code.replace(/\r\n/g, "\n");

我的解决方案


2
投票

model.setEOL(monaco.editor.EndOfLineSequence.LF)

用途:

const editor = monaco.editor.create(document.getElementById('container'), {});
const model = editor.getModel()
model.setEOL(monaco.editor.EndOfLineSequence.LF);
editor.getValue();

更多详细信息:如何将 Windows 的 EOL 设置为 LF,以便 API 通过以下方式获取值 。不是


1
投票

您尝试过 setEOL() 吗? 我也面临同样的问题,但我使用了 ITextModel 接口,所以不能使用 setEOL。


0
投票

我也遇到了那个噩梦。

这是我使用 Firepad 和 Monaco 处理它时给出的解决方案:

const normalizeLineEndings = (str) => {
    return str?.replace(/\r\n|\r/g, "\n") ?? "";
}

const normalizeEditorModelText = (model, monaco) => {
    if (model.getEndOfLineSequence() === monaco.editor.EndOfLineSequence.LF) {
        return;
    }
    // newer Monaco versions recommend pushEOL over setEOL
    model.pushEOL(monaco.editor.EndOfLineSequence.LF);
    model.applyEdits([
        {
            range: model.getFullModelRange(),
            text: model.getLinesContent().reduce((r, e) => `${r}${normalizeLineEndings(e)}`, "")
        }
    ]);
}

// call it as soon a you create your model
const model = monaco.editor.createModel(text, language);
normalizeEditorModelText(model, monaco);

// IF YOU ALREADY HAVE CODE THAT NEEDS FIXING: CALL IT ON THE FIRST FIREPAD SYNC
firepadInstance.on('synced',...);

这些是我处理过的无意义错误:

  • 错误:retain 需要一个正整数。
  • pushOperations() 相关错误来自
    MonacoAdapter.prototype.operationFromMonacoChanges

有关我的GH 帖子的更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.