如何以编程方式将光标放在 vscode 编辑器扩展中的特定行?

How to put cursor on specified line in vscode editor extension programatically?

我正在开发 vscode TextEditorEdit 扩展。这里我需要根据一个 api 响应内容,在以编辑器打开文件后将光标放在指定的行号上。我怎样才能做到这一点?或者什么 class 或接口提供了执行此操作的功能?

以下是我尝试实现此目的的代码。但两者都没有用。甚至没有引发任何异常或错误。

尽管 这是在编辑器上正确打开和显示文件。但是当我尝试改变光标位置时没有任何效果。

  1. THENing vscode.window.showTextDocument() 并使用自定义选择分配 editor.selection。这对编辑器没有影响。
vscode.workspace.openTextDocument(openPath).then(async doc => {

  let pos1 = new vscode.Position(57, 40)
  let pos2 = new vscode.Position(57, 42)
  let sel = new vscode.Selection(pos1,pos2)
  let rng = new vscode.Range(pos1, pos2)
  
  vscode.window.showTextDocument(doc, vscode.ViewColumn.One).then((editor: vscode.TextEditor) => {
    editor.selection = sel
    //editor.revealRange(rng, vscode.TextEditorRevealType.InCenter) 
  });
});

我也尝试用 editor.revealRange(rng, vscode.TextEditorRevealType.InCenter) 显示范围,但也没有效果。

  1. vscode.window.showTextDocument()中添加options?:参数。但这也无济于事。请看下面的代码-
vscode.workspace.openTextDocument(openPath).then(async doc => {
  
  let pos1 = new vscode.Position(57, 40)
  let pos2 = new vscode.Position(57, 42)
  let rng = new vscode.Range(pos1, pos2)
  
  vscode.window.showTextDocument(doc, {selection: rng, viewColumn: vscode.ViewColumn.One})
});

我猜,问题出在先打开文件并将文本文档显示到编辑器中,然后更改光标位置。

您可以使用VSCode的cursorMove内置命令:

  let openPath = URI.file(mainPath);
  vscode.workspace.openTextDocument(openPath).then(async (doc) => {
    let line = 56;
    let char = 10;
    let pos1 = new vscode.Position(0, 0);
    let pos2 = new vscode.Position(0, 0);
    let sel = new vscode.Selection(pos1, pos2);
    vscode.window.showTextDocument(doc, vscode.ViewColumn.One).then((e) => {
      e.selection = sel;
      vscode.commands
        .executeCommand("cursorMove", {
          to: "down",
          by: "line",
          value: line,
        })
        .then(() =>
          vscode.commands.executeCommand("cursorMove", {
            to: "right",
            by: "character",
            value: char,
          })
        );
    });
  });

此代码段首先打开文档并在编辑器中显示它,然后将光标移动给定的行数,然后将其移动给定的字符数。