vscode 无法撤销从WorkspaceEdit中删除的文件

mum43rcc  于 22天前  发布在  Vscode
关注(0)|答案(4)|浏览(17)

要重现,只需使用WorkspaceEdit API删除一个文件 - 由于撤销堆栈似乎与TextEditor绑定在一起,因此无法撤销文件删除。然而,如果从打开的文件中撤销,可以撤销文件创建/重命名。这似乎有点不一致,尤其是因为资源管理器提供了更灵活的撤销堆栈。
简单示例:

const we = new vscode.WorkspaceEdit();
we.createFile(fileUri, { ignoreIfExists: true});
await vscode.workspace.applyEdit(we); // This can be undone if you "undo" inside fileUri

const we2 = new vscode.WorkspaceEdit();
we2 .deleteFile(fileUri);
await vscode.workspace.applyEdit(we2); // This can never be undone

是否有可能在不打开TextEditor的情况下引入一种撤销方法?

neskvpey

neskvpey1#

这是已实现并应该可以工作的。实际上,资源管理器使用了相同的服务/逻辑。因此,请更新上述代码片段,使它们形成一个完整的示例并具有完整的步骤。

nlejzf6q

nlejzf6q2#

我刚刚使用 yo 创建了这个扩展:
要构建,只需运行 yarnyarn run compile
请查看以下两个场景:
文件创建:

  1. 运行扩展并打开一个文件夹(任意)
  2. 执行命令 "Create file.txt"
  3. 尝试按 "Ctrl + Z" 撤销或从命令面板执行命令 Undo(这不会撤销文件创建)
  4. 打开创建的文件并立即撤销(这将起作用)
    所以似乎撤销栈与 TextEditor 本身相关联,如果文件未打开,则无法触发。
    文件删除:
  5. 运行扩展并打开一个文件夹(任意)
  6. 执行命令 "Create file.txt"
  7. 执行命令 "Delete file.txt"
  8. 像之前一样尝试撤销,什么都不会发生
4nkexdtk

4nkexdtk3#

我可以重现这个问题,但我目前还不知道如何修复它。看起来没有一个撤销实现负责这个编辑,因此它没有被撤销。

ef1yzkbh

ef1yzkbh4#

你好,@jrieken,关于这个限制的更新有任何消息吗?如何将其提高到待办事项列表的后面?感谢你的支持。

相关问题