要重现,只需使用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
的情况下引入一种撤销方法?
4条答案
按热度按时间neskvpey1#
这是已实现并应该可以工作的。实际上,资源管理器使用了相同的服务/逻辑。因此,请更新上述代码片段,使它们形成一个完整的示例并具有完整的步骤。
nlejzf6q2#
我刚刚使用
yo
创建了这个扩展:要构建,只需运行
yarn
和yarn run compile
请查看以下两个场景:
文件创建:
Undo
(这不会撤销文件创建)所以似乎撤销栈与
TextEditor
本身相关联,如果文件未打开,则无法触发。文件删除:
4nkexdtk3#
我可以重现这个问题,但我目前还不知道如何修复它。看起来没有一个撤销实现负责这个编辑,因此它没有被撤销。
ef1yzkbh4#
你好,@jrieken,关于这个限制的更新有任何消息吗?如何将其提高到待办事项列表的后面?感谢你的支持。