如何在扩展中使用 cursorMove 命令,以便在单击 TreeItem 元素时光标跳转到特定位置?

How do I use the cursorMove command in an extension so that the cursor jumps to a specific position when clicking on a TreeItem element?

我目前正在尝试找到一个执行命令,以便光标移动到我已经保存为变量的特定位置

我的位置保存为 line = functions[i].location.range.start.line 用于特定行,column = functions[i].location.range.start.character 用于特定位置
我已经知道我可以用 new vscode.Position(line,column)

创建职位

现在,我该如何将其集成到命令中
"cursorMove({to: $ViewPosition, select: boolean, by: $By, value: number})"?

对我有用的(默认)将光标向上移动一行,

vscode.commands.executeCommand("cursorMove",{
     to: "up",
     by: "wrappedLine",
     select: false,
     value: 1
});

我想从函数数组中实现我的 location/position 以便命令

let clickEvent = vscode.commands.registerCommand('homeItem.click', (functions[i].location) => {
    vscode.commands.executeCommand("cursorMove", {
        to: x,
        by: x,
        select: false,
        value: x
    });
});

将光标焦点设置到提供的位置

我看到两个选项:

  1. cursorMove 是相对于当前位置的。不是我想你知道的绝对位置。所以你必须得到当前光标位置 vscode.window.activeTextEditor.selection.active.line 和你的 line = functions[i].location.range.start.line 之间的差异,并在 cursorMove 命令中使用它(在计算后知道你是否需要向上或向下) .

你必须对 character 做同样的事情,如果你关心的话,在正确的行内再做一个 cursorMove 以按字符移动。所以工作量很大。

  1. 通过设置一个selection来设置光标位置即可。
const myPos = new vscode.Position(x,x);     // I think you know how to get the values, let us know if you don't
vscode.window.activeTextEditor?.selections = [new vscode.Selection(myPos, myPos)];

或者先做这个检查:

if (vscode.window.activeTextEditor) {
  const myPos = new vscode.Position(x,x);     // I think you know how to get the values, let us know if you don't
  vscode.window.activeTextEditor?.selections = [new vscode.Selection(myPos, myPos)];
}