Vscode 扩展:如何实现悬停功能以向命令添加参数,例如 运行 带查询的搜索命令
Vscode extension: how to implement a hover function to add arguments to commands, e.g., to run search command with query
我正在尝试在 vscode 悬停功能中开发自定义按钮。这意味着如果我单击快捷按钮,它将转到搜索侧边栏并进行特定的查询搜索。参考上传的两张图
在vscode命令形式中,扩展代码如下所示。 (这很好用,除了它需要从命令托盘 运行)
let disposable = vscode.commands.registerCommand('test-hover.helloWorldSearch', () => {
var word = "i_want_to_search";
const searchOptions = {
query: word,
};
vscode.commands.executeCommand('workbench.action.findInFiles', searchOptions);
});
context.subscriptions.push(disposable);
然后我用vscode.languages.registerHoverProvider转换成悬停,代码是这样的:
let disposable1 = vscode.languages.registerHoverProvider('javascript', {
provideHover(document, position, token) {
var word = "i_want_to_search";
const searchOptions = {
query: word,
};
const commentCommandUri = vscode.Uri.parse(`command:workbench.action.findInFiles`);
const contents = new vscode.MarkdownString(`[Search String](${commentCommandUri})`);
contents.isTrusted = true;
return new vscode.Hover(contents);
}
});
context.subscriptions.push(disposable1);
此代码能够导航侧边栏以在文件中搜索但没有任何查询 seacrh。
问题是,如果我使用“vscode.Uri.parse”,我无法将“searchOptions”传递给命令。是否有任何其他方法可以执行与上述代码相同的操作但能够传递 searchOption?我试图在互联网上搜索许多不同的例子,但大多数只出现在没有 searchOption 的 运行 命令中。
命令的参数必须作为编码字符串附加,如 command-uris 所示。
const searchCommandUri = vscode.Uri.parse(
`command:workbench.action.findInFiles?${encodeURIComponent(JSON.stringify(searchOptions))}`
);
const contents = new vscode.MarkdownString(`[Search String](${searchCommandUri})`);
如果您想获取鼠标悬停的字词,请尝试以下代码:
const word = document.getText(document.getWordRangeAtPosition(position));
现在您的“搜索字符串”悬停按钮将搜索悬停在上面的词。
然后将文本:“搜索字符串”更改为您要搜索的实际单词:
const contents = new vscode.MarkdownString(`[Search: ${word}](${searchCommandUri})`);
我正在尝试在 vscode 悬停功能中开发自定义按钮。这意味着如果我单击快捷按钮,它将转到搜索侧边栏并进行特定的查询搜索。参考上传的两张图
在vscode命令形式中,扩展代码如下所示。 (这很好用,除了它需要从命令托盘 运行)
let disposable = vscode.commands.registerCommand('test-hover.helloWorldSearch', () => {
var word = "i_want_to_search";
const searchOptions = {
query: word,
};
vscode.commands.executeCommand('workbench.action.findInFiles', searchOptions);
});
context.subscriptions.push(disposable);
然后我用vscode.languages.registerHoverProvider转换成悬停,代码是这样的:
let disposable1 = vscode.languages.registerHoverProvider('javascript', {
provideHover(document, position, token) {
var word = "i_want_to_search";
const searchOptions = {
query: word,
};
const commentCommandUri = vscode.Uri.parse(`command:workbench.action.findInFiles`);
const contents = new vscode.MarkdownString(`[Search String](${commentCommandUri})`);
contents.isTrusted = true;
return new vscode.Hover(contents);
}
});
context.subscriptions.push(disposable1);
此代码能够导航侧边栏以在文件中搜索但没有任何查询 seacrh。 问题是,如果我使用“vscode.Uri.parse”,我无法将“searchOptions”传递给命令。是否有任何其他方法可以执行与上述代码相同的操作但能够传递 searchOption?我试图在互联网上搜索许多不同的例子,但大多数只出现在没有 searchOption 的 运行 命令中。
命令的参数必须作为编码字符串附加,如 command-uris 所示。
const searchCommandUri = vscode.Uri.parse(
`command:workbench.action.findInFiles?${encodeURIComponent(JSON.stringify(searchOptions))}`
);
const contents = new vscode.MarkdownString(`[Search String](${searchCommandUri})`);
如果您想获取鼠标悬停的字词,请尝试以下代码:
const word = document.getText(document.getWordRangeAtPosition(position));
现在您的“搜索字符串”悬停按钮将搜索悬停在上面的词。
然后将文本:“搜索字符串”更改为您要搜索的实际单词:
const contents = new vscode.MarkdownString(`[Search: ${word}](${searchCommandUri})`);