VSCode以编程方式搜索和替换

时间:2020-08-20 13:55:20

标签: visual-studio-code vscode-extensions

我想在扩展部分中执行命令,以在工作空间中的所有文件中搜索某个单词(工作空间包含超过15k个文件),然后将该单词替换为其他单词,但是我找不到用于的任何VSCode API这种原因。

你们也许知道是否有一些命令吗?

2 个答案:

答案 0 :(得分:1)

你可以用宏来做到这一点。您可以对其进行编码以依次打开每个文件,搜索并替换文本,然后保存文件。

类似于 VSCode 宏:

https://marketplace.visualstudio.com/items?itemName=EXCEEDSYSTEM.vscode-macros

答案 1 :(得分:0)

我扩展了我编写的扩展程序,该扩展程序可以使用用户定义的搜索和替换命令执行您想要的操作。见Find and Transform。它基本上为 workbench.action.findInFiles 命令构建参数,如下所示。代码太多无法在此处显示,但请查看 repository,尤其是 search.js


在扩展中,您可以这样做:

vscode.commands.executeCommand('workbench.action.findInFiles',
  {
    query: "customCommentHowdy",   // arguments to the findInFiles command
    replace: "that's so swell",
    triggerSearch: true,
    preserveCase: true,
    useExcludeSettingsAndIgnoreFiles: true,
    isRegex: false,
    isCaseSensitive: true,
    matchWholeWord: true,
    filesToInclude: "",
    filesToExclude: "./*.css"
  }).then(() => {                      // this command just returns 'undefined'
    setTimeout(() => {
      vscode.commands.executeCommand('search.action.replaceAll');
    }, 1000);
});

我无法让它在没有延迟的情况下触发 replaceAll - 对于 15k 文件,您可能需要增加一点。 Async/await 似乎也没有帮助。

您仍会收到有关实际执行 replace 的确认框,我认为这无法避免。

如果您没有在其中放置 search.action.replaceAll 命令,那么用户将必须自己点击 replaceAll 按钮(然后验证是否确实想要进行替换)。

执行此操作时,搜索面板将出现并聚焦。