簡體   English   中英

Vscode 擴展:如何實現 hover function 以將 arguments 添加到命令中,例如,運行帶查詢的搜索命令

[英]Vscode extension: how to implement a hover function to add arguments to commands, e.g., to run search command with query

我正在嘗試在 vscode hover function 中開發一個自定義按鈕。這意味着如果我單擊快捷按鈕,它將 go 搜索側邊欄並進行特定的查詢搜索。 參考上傳的兩張圖片。

懸停搜索按鈕

結果側邊欄更改

在 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 轉換為 hover,代碼如下所示:

     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? 我試圖在 inte.net 中搜索許多不同的例子,但大多數只出來運行沒有 searchOption 的命令。

您的命令的 arguments 必須作為編碼字符串附加,如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));

現在,您的“搜索字符串”hover 按鈕將搜索懸停的單詞。

然后將文本:“搜索字符串”更改為您要搜索的實際單詞:

const contents = new vscode.MarkdownString(`[Search: ${word}](${searchCommandUri})`);

將鼠標懸停在搜索按鈕演示上

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM