Из-за проблем, которые я прокомментировал в ответе выше, я закончил тем, что написал быструю функцию, которая делает вставку дружественной к нескольким курсорам, и если выделение было пустым, то не оставляло вставленный текст, выбранный впоследствии (то естьимеет такое же интуитивное поведение, как если бы вы нажали CTRL + V , или набрали текст на клавиатуре и т. д.)
Вызывать это просто:
// x is the cursor index, it can be safely ignored if you don't need it.
InsertText(x => 'Hello World');
Реализация:
function InsertText(getText: (i:number) => string, i: number = 0, wasEmpty: boolean = false) {
let activeEditor = vscode.window.activeTextEditor;
if (!activeEditor) { return; }
let sels = activeEditor.selections;
if (i > 0 && wasEmpty)
{
sels[i - 1] = new vscode.Selection(sels[i - 1].end, sels[i - 1].end);
activeEditor.selections = sels; // required or the selection updates will be ignored! ?
}
if (i < 0 || i >= sels.length) { return; }
let isEmpty = sels[i].isEmpty;
activeEditor.edit(edit => edit.replace(sels[i], getText(i))).then(x => {
InsertText(getText, i + 1, isEmpty);
});
}