Home > Mobile >  Vscode move to line X after openTextDocument
Vscode move to line X after openTextDocument

Time:06-13

I'm developing a VS Code extension that jump to a specific file:num, but I'm stuck at the step of moving the cursor to a specific line after opening a file. How can I achieve this :

export const openAndMoveToLine = async (file_line: string) => {

  // /home/user/some/path.php:10
  let [filename, line_number] = file_line.split(":")
  
  // opening the file => OK
  let setting: vscode.Uri = vscode.Uri.parse(filename)
  let doc = await vscode.workspace.openTextDocument(setting)
  vscode.window.showTextDocument(doc, 1, false);

  // FIXME: After being opened, now move to the line X  => NOK **/

  await vscode.commands.executeCommand("cursorMove",     {
          to: "down", by:'wrappedLine',
          value: parseInt(line_number)
    });

}

Thank you

CodePudding user response:

You will first need to get access to the active editor. This is done by adding a .then to the showTextDocument call (which is a Thenable function) that returns a text editor object. You will then be able to use the textEditor variable (as in the example) to set the position of the cursor using the selection property as follows:

vscode.window.showTextDocument(doc, 1, false).then((textEditor: TextEditor) => {
  const lineNumber = 1;
  const characterNumberOnLine = 1;
  const position = new vscode.Position(lineNumber, characterNumberOnLine);
  const newSelection = new vscode.Selection(position, position);
  textEditor.selection = newSelection;
});

Reference to selection API can be found here.

The usecase that you are exploring has been discussed in GitHub issue that can be found here.

CodePudding user response:

It can be done with the TextDocumentShowOptions easily:

const showDocOptions = {

    preserveFocus: false,
    viewColumn: 1,
    selection: new vscode.Range(314, 0, 314, 0)
};

let doc = await vscode.window.showTextDocument(setting, showDocOptions);
  • Related