2
this VS Code extensionを開発しているうちに、vscode.window.activeTextEditor.edit
メソッドで作成した行にカーソルを移動しなければならなかったが、カーソルを移動しようとしたときにその行が存在しないことを認識したので、setTimeout
私は、これは良い習慣ではないことを知っているように、私は道を見つけようとしている私はラインがあるコードを実行するときになることを確認することができないため、TextEditorEdit.replaceは非同期で、終了時にコードを実行する方法は?
let editor: TextEditor = vscode.window.activeTextEditor;
let selections: Selection[] = editor.selections;
let doc: TextDocument = editor.document;
editor.edit(function (edit: TextEditorEdit): void {
selections.forEach((selection: Selection, index: number) => {
for (let i = selection.start.line; i <= selection.end.line; i++) {
let selLine: TextLine = doc.lineAt(i);
let insertPos: Range = selLine.range;
let insertLineText: string = selLine.text;
// This is async :(
edit.replace(insertPos, insertSemicolon(insertLineText, newLine));
}
});
if (newLine) {
// Move cursor to the next line
setTimeout(() => {
vscode.commands.executeCommand("cursorMove", {
to: "down",
by: "wrappedLine",
select: false,
value: 1
}).then(() => {
vscode.commands.executeCommand("cursorMove", {
to: "wrappedLineEnd",
by: "wrappedLine",
select: false
})
});
}, 50);
}
});
:カーソルを移動しようとしますすべてを置き換えるために編集が終了した場合にのみ、このコードを実行します。
ありがとう:
のようなものを試してみてください!ちょうど私が欲しかったように働いた –