如何使用 VSCode 扩展 API 启动“findInFiles”?

Dav*_*ers 2 typescript visual-studio-code vscode-extensions

我正在尝试编写一个扩展程序,该扩展程序将自动选择光标下的单词,打开在文件中查找对话框,并使用该选择启动搜索。到目前为止,除了实际启动搜索之外,我已经能够让扩展程序执行所有操作。我仍然必须在文件中查找对话框中按 Enter 才能实际进行搜索。这是我到目前为止的扩展代码:

import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
    let disposable = vscode.commands.registerCommand('extension.searchUnderCursor', () => {
        // Get the current editor
        let editor = vscode.window.activeTextEditor;
        if (!editor) {
            console.log('No active editor!');
            return;
        }

        // Get word under cursor position
        let wordRange = editor.document.getWordRangeAtPosition(editor.selection.start);
        if (!wordRange) {
            console.log('No word under the cursor!');
            return;
        }

        // Select the word
        editor.selection = new vscode.Selection(wordRange.start, wordRange.end);

        // Initiate search
        vscode.commands.executeCommand('workbench.action.findInFiles').then(() => {
            vscode.commands.executeCommand('default:type', {text: '\n'});
        });
    });

    context.subscriptions.push(disposable);
}

export function deactivate() {}
Run Code Online (Sandbox Code Playgroud)

您可以看到我试图找到一种方法,在“在文件中查找”对话框中按 Enter 键开始搜索。当然,那是行不通的。我怎样才能在这里获得我想要的功能?

Dav*_*ers 6

其实,我想通了。这是我的解决方案:

import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
    let disposable = vscode.commands.registerCommand('extension.searchUnderCursor', () => {
        // Get the current editor
        let editor = vscode.window.activeTextEditor;
        if (!editor) {
            console.log('No active editor!');
            return;
        }

        // Get word under cursor position
        let wordRange = editor.document.getWordRangeAtPosition(editor.selection.start);
        if (!wordRange) {
            console.log('No word under the cursor!');
            return;
        }

        // Get word text
        let wordText = editor.document.getText(wordRange);

        // Initiate search
        vscode.commands.executeCommand('workbench.action.findInFiles', {
            query: wordText,
            triggerSearch: true,
            matchWholeWord: true,
            isCaseSensitive: true,
        });
    });

    context.subscriptions.push(disposable);
}

export function deactivate() {}
Run Code Online (Sandbox Code Playgroud)

事实证明,该findInFiles操作有许多它接受的有用参数:https : //github.com/microsoft/vscode/blob/9a987a1cd0d3413ffda4ed41268d9f9ee8b7565f/src/vs/workbench/contrib/search/browser/searchActions.ts#L11 -L172