web-dev-qa-db-ja.com

ドキュメントのテキスト全体の範囲を取得するVSコード拡張API

それを行う良い方法が見つかりませんでした。私の現在のアプローチは、最初にすべてを選択することです:

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

選択してから置き換えると点滅するため、これは理想的ではありません。

13
Jeremy Meng

これは堅牢ではないかもしれませんが、私はこれを使用しています:

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

短い例:

const fullText = document.getText()

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

ドキュメントテキストよりも1文字だけ長いRangeを作成し、validateRangeを使用して正しいRangeにトリミングできます。このメソッドは、テキストの最後の行を検索し、最後の文字をPositionの終わりRangeとして使用します。

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));
5
Jan Dolejsi

この例が役立つことを願っています。ソース: https://code.visualstudio.com/docs/extensions/example-hello-world#_a-simple-change

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

var selection = editor.selection;
var text = editor.document.getText(selection);
4
js-kyle