如何以编程方式将光标放在 vscode 编辑器扩展中的特定行?
How to put cursor on specified line in vscode editor extension programatically?
我正在开发 vscode TextEditorEdit 扩展。这里我需要根据一个 api 响应内容,在以编辑器打开文件后将光标放在指定的行号上。我怎样才能做到这一点?或者什么 class 或接口提供了执行此操作的功能?
以下是我尝试实现此目的的代码。但两者都没有用。甚至没有引发任何异常或错误。
尽管 这是在编辑器上正确打开和显示文件。但是当我尝试改变光标位置时没有任何效果。
- 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)
显示范围,但也没有效果。
- 在
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,
})
);
});
});
此代码段首先打开文档并在编辑器中显示它,然后将光标移动给定的行数,然后将其移动给定的字符数。
我正在开发 vscode TextEditorEdit 扩展。这里我需要根据一个 api 响应内容,在以编辑器打开文件后将光标放在指定的行号上。我怎样才能做到这一点?或者什么 class 或接口提供了执行此操作的功能?
以下是我尝试实现此目的的代码。但两者都没有用。甚至没有引发任何异常或错误。
尽管 这是在编辑器上正确打开和显示文件。但是当我尝试改变光标位置时没有任何效果。
- 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)
显示范围,但也没有效果。
- 在
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,
})
);
});
});
此代码段首先打开文档并在编辑器中显示它,然后将光标移动给定的行数,然后将其移动给定的字符数。