Как свернуть все открытые редакторы в коде Visual Studio, используя скрипт - PullRequest
0 голосов
/ 06 января 2019

Я хотел бы иметь возможность создать / написать команду для свертывания всего кода во всех открытых редакторах кода Visual Studio.

Мне кажется, я очень близко.

Я использую расширение "команды сценариев", написанное Марсель Дж. Клоуберт

Когда я использую следующий скрипт с примерно 7 открытыми редакторами в одной группе. Я добиваюсь следующего:

  1. Открытый редактор (во время выполнения) имеет свернутый код
  2. VSC будет зацикливаться на открытых редакторах
  3. Ни у одного другого редактора нет свернутого кода

Сценарий, который я использую:

// Fold all code in all open editors.
function execute(args) {

    // Obtain access to vscode
    var vscode = args.require('vscode');

    // Set number of open editors... (future: query vscode for number of open editors)
    var numOpenEditor = 20;


    // Loop for numOpenEditor times
    for (var i = 0; i <= numOpenEditor; i++){

        // Fold the current open editor
        vscode.commands.executeCommand('editor.foldAll');

        // Move to the next editor to the right
        vscode.commands.executeCommand('workbench.action.nextEditor');

        // Loop message
        var statusString = 'Loop ->' + i

        // print message
        vscode.window.showErrorMessage(statusString);
    }

}

// Script Commands must have a public execute() function to work.
exports.execute = execute;

Я сделал интересное наблюдение, когда я использую приведенный выше скрипт с примерно 7 открытыми редакторами с двумя или более группами. Что-то о переключении на новую группу позволит команде editor.foldAll работать , Обратите внимание, что если в группе несколько редакторов, единственный редактор, который свернет свой код, - это открытый редактор в группе. Таким образом, все остальные редакторы не будут сбрасываться.

Я также подумал, что, может быть ... сценарий должен был замедлиться, поэтому я добавил функцию для приостановки на каждой итерации. Это тоже не сработало.

Любая помощь будет отличной!

1 Ответ

0 голосов
/ 06 января 2019

Вам просто нужно сделать эту функцию асинхронной и дождаться завершения вызовов executeCommand, прежде чем двигаться дальше:

// Fold all code in all open editors.
async function execute(args) {

    // Obtain access to vscode
    var vscode = args.require('vscode');

    // Set number of open editors... (future: query vscode for number of open editors)
    var numOpenEditor = 5;


    // Loop for numOpenEditor times
    for (var i = 0; i <= numOpenEditor; i++) {

        // Fold the current open editor
        await vscode.commands.executeCommand('editor.foldAll');

        // Move to the next editor to the right
        await vscode.commands.executeCommand('workbench.action.nextEditor');

        // Loop message
        var statusString = 'Loop ->' + i

        // print message
        vscode.window.showErrorMessage(statusString);
    }

}

// Script Commands must have a public execute() function to work.
exports.execute = execute;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...