javascript - Vscode 扩展:如何实现悬停功能以向命令添加参数,例如,使用查询运行搜索命令
问题描述
我正在尝试在 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})`);
推荐阅读
- c# - 无法转换类型为“的对象”
键入'System.Collections.Generic.List - python-3.x - 根据字段值重现/中断行
- android - 固定间隔后在android中从后台执行REST调用
- c# - 如何将加载到 C# windows 窗体中的图片框的图像添加到 SQL 数据库表
- javascript - 从任务列表中存储任务的位置
- angular - 树组件点击事件
- python - 让龙格库塔更快
- service - systemd:没有“[安装]”部分的服务单元,它会在启动时自动运行吗?
- php - java.lang.string 无法转换为 JSONArray Android Mysql
- python - 熊猫如何有不同颜色的折线图