【问题标题】:VS Code Extensions: Find and replace a string in workspaceVS Code Extensions:在工作区中查找和替换字符串
【发布时间】:2016-06-27 11:13:51
【问题描述】:

我搜索了很多,但没有找到任何有效的方法来搜索 vscode.workspace 内的特定文件并替换找到的术语。

所以基本上我想在vscode.workspace 中搜索一个名为 app.component.ts 的文件,并检查该文件是否包含 // my-marker。如果是这样,这个标记应该被其他一些字符串替换。

有人知道这是否可能吗?如果是这样,怎么办? 这是我的方法:

function createAppEnvironment(name: string)
{
  if(name != undefined)
  {
    // replace all blanks ' ' with dashes '-'
    name = name.replace(/\w/g, '-');

    vscode.workspace.findFiles('app/app.component.ts', '', 1).then(
        // all good
        (result: vscode.Uri[]) => {
            vscode.workspace.openTextDocument(result[0]);
            vscode.commands.executeCommand('edit.findAndReplace');
        },
        // rejected
        (reason: any) => {
            // output error
            vscode.window.showErrorMessage(reason);
        });

    // Display a message box to the user
    // vscode.window.showInformationMessage('Successfully created a new App!');
}
else
{
    vscode.window.showWarningMessage("Nothing was created, due to the fact that you haven't entered a name.");
}

}

【问题讨论】:

    标签: visual-studio-code vscode-extensions


    【解决方案1】:

    我自己没有做过,所以我在这里有点犹豫......

    而不是打开查找/替换:

    1. 使用 TextDocument.getText() 获取文本。
    2. 使用正则表达式查找您的标记。
    3. 使用 TextDocument.positionAt() 获取位置,以便在需要编辑的文档中构建范围。
    4. 创建一个代表您的更改的 WorkspaceEdit 对象,使用 WorkspaceEdit.replace() 来指示实际的编辑。
    5. 使用 Workspace.applyEdit() 应用编辑。

    【讨论】:

    • 您好,感谢您的快速回答!这听起来不错,但我怎样才能从工作区定位正确的文档? (步骤“0”)
    • @jlang Workspace.findFiles() 应该可以正常工作(尽管您可能不需要“app/”部分)。
    • @jlang 更好的解决方案是使用vscode.window.activeTextEditor.document 来获取当前活动的文档。
    猜你喜欢
    • 2020-12-30
    • 2011-08-22
    • 2015-09-22
    • 2019-06-24
    • 2016-01-13
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多