Estoy tratando de desarrollar un botón personalizado en la función de desplazamiento de vscode. Es decir, si hago clic en el botón de acceso directo, irá a la barra lateral de búsqueda y tendrá una búsqueda de consulta específica. Consulte las dos imágenes que se cargan.


En forma de comando vscode, el código de extensión se verá así. (Esto funciona bien, excepto que requiere ejecutarse desde la paleta de comandos)
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);Después de eso, me convierto en hover usando vscode.languages.registerHoverProvider, y el código se ve así:
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);Este código es capaz de navegar por la barra lateral para buscar en el archivo PERO sin ninguna búsqueda de consulta. El problema es que no puedo pasar "opciones de búsqueda" al comando si estoy usando "vscode.Uri.parse". ¿Hay alguna otra forma de hacer la misma acción que el código anterior pero capaz de pasar la opción de búsqueda? He intentado buscar muchos ejemplos diferentes en Internet, pero la mayoría solo sale para ejecutar el comando sin la opción de búsqueda.
Los argumentos de su comando deben agregarse como una cadena codificada, como se muestra en command-uris .
const searchCommandUri = vscode.Uri.parse( `command:workbench.action.findInFiles?${encodeURIComponent(JSON.stringify(searchOptions))}` ); const contents = new vscode.MarkdownString(`[Search String](${searchCommandUri})`);Si desea obtener la palabra sobre la que se desplaza, pruebe este código:
const word = document.getText(document.getWordRangeAtPosition(position));Ahora su botón flotante "Buscar cadena" buscará la palabra sobre la que se está desplazando.
Luego cambie el texto: "Cadena de búsqueda" a la palabra real que buscará:
const contents = new vscode.MarkdownString(`[Search: ${word}](${searchCommandUri})`);