如何使用脚本在Visual Studio代码中折叠所有打开的编辑器

时间:2019-01-05 23:41:27

标签: visual-studio-code

我希望能够创建/编写一个命令来折叠Visual Studio代码中所有打开的编辑器中的所有代码。

我相信我非常亲近。

我正在使用Marcel J. Kloubert编写的“脚本命令”扩展名

当我将以下脚本与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个左右的开放式编辑器结合使用时,我会发现一个有趣的发现。具有两个或更多组。关于切换到新组的操作将允许命令{{1} } 去工作。请注意,如果组具有多个编辑器,则折叠其代码的唯一编辑器是组中的打开编辑器。因此,所有其他编辑器都不会折叠。

我还认为,也许...该脚本需要放慢速度,因此我添加了一个在每次迭代时暂停的函数。事实证明这也没有用。

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:1)

您只需要使此函数异步并等待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;