Set selection range in the Visual Studio Code document

Viewed 2422

I have a command in an extension, before run the command, I want to change the selection range to get the whole lines...

const sel = textEditor.selection;
const firstLine = textEditor.document.lineAt(sel.start.line);
const lastLine = textEditor.document.lineAt(sel.end.line);

const range = new vscode.Range(firstLine.lineNumber, firstLine.range.start.character, lastLine.lineNumber, lastLine.range.end.character);

I've created a new range, but I don't know how to set the selection of the document to a new range...

2 Answers

new Selection() has 2 overloads (2 or 4 arguments):

  1. Selection(anchor: vscode.Position, active: vscode.Position)
  2. Selection(anchorLine: number, anchorCharacter: number, activeLine: number, activeCharacter: number)

Example, using 4 arguments:

textEditor.selection = new vscode.Selection(firstLine.lineNumber, firstLine.range.start.character, 
lastLine.lineNumber, lastLine.range.end.character)

To make multiple cursors you need to set textEditor.selections

textEditor.selections = [
    new vscode.Selection(0, 0, 0, 10),
    new vscode.Selection(1, 0, 1, 10),
];

For registering a command for setting the cursor position, i used this :

let cmd = vscode.commands.registerTextEditorCommand('extension.mysnippet', (te) => {
  // selection start = line 3, char 5 ||| selection end = line 3, char 5
  te.selection = new vscode.Selection(5, 3, 5, 3)
});
context.subscriptions.push(cmd);
Related