【问题标题】:VS Code extension Api to get the Range of the whole text of a document?VS Code扩展Api获取文档整个文本的范围?
【发布时间】:2017-12-25 11:47:57
【问题描述】:

我还没有找到一个好的方法来做到这一点。我目前的做法是先全选:

vscode.commands.executeCommand("editor.action.selectAll").then(() =>{
    textEditor.edit(editBuilder => editBuilder.replace(textEditor.selection, code));
    vscode.commands.executeCommand("cursorMove", {"to": "viewPortTop"});
});

这并不理想,因为它在选择然后替换时会闪烁。

【问题讨论】:

    标签: typescript visual-studio-code vscode-extensions


    【解决方案1】:

    这可能不太健壮,但我一直在使用它:

    var firstLine = textEditor.document.lineAt(0);
    var lastLine = textEditor.document.lineAt(textEditor.document.lineCount - 1);
    var textRange = new vscode.Range(firstLine.range.start, lastLine.range.end);
    

    【讨论】:

    • 谢谢!这比选择所有然后从选择中获取范围要好。
    【解决方案2】:

    我希望这个例子可能会有所帮助:

    var editor = vscode.window.activeTextEditor;
    if (!editor) {
        return; // No open text editor
    }
    
    var selection = editor.selection;
    var text = editor.document.getText(selection);
    

    来源vscode extension samples > document editing sample

    【讨论】:

    • 这不会产生范围
    【解决方案3】:

    您可以创建一个比文档文本仅长一个字符的Range,然后使用validateRange 将其修剪为正确的Range。该方法查找文本的最后一行,并使用最后一个字符作为Range 的结尾Position

    let invalidRange = new Range(0, 0, textDocument.lineCount /*intentionally missing the '-1' */, 0);
    let fullRange = textDocument.validateRange(invalidRange);
    editor.edit(edit => edit.replace(fullRange, newText));
    

    【讨论】:

      【解决方案4】:

      一个更短的例子:

      const fullText = document.getText()
      
      const fullRange = new vscode.Range(
          document.positionAt(0),
          document.positionAt(fullText.length - 1)
      )
      

      【讨论】:

      • 这段代码有问题。我不知道问题出在哪里。但是,我在我的 vscode 扩展中使用了这个 sn-p,它在选择结束时触发了一个错误。我改用 Jan Dolejsi 的解决方案,效果很好。
      • 如果您的目标是获取整个文档文本,那么此答案的第一行就是您所需要的。获取所有文本只是为了获得一个范围并不是很有效。 (旁注:当使用 getWordRangeAtPosition 获取 getText 的范围时,如果返回的范围未定义,您将得到所有在悬停时无效的文本)
      猜你喜欢
      • 1970-01-01
      • 2017-01-26
      • 2020-04-13
      • 1970-01-01
      • 2017-04-18
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多