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})`);