【问题标题】:vscode Editable Virtual Documents in Extensionsvscode 扩展中的可编辑虚拟文档
【发布时间】:2021-07-12 22:41:48
【问题描述】:

我正在尝试使用 vscode 编写一个与我的后端服务交互的扩展。 我遇到的问题是我要编辑的“文档”实际上是嵌套的 JSON 文档。例如,我正在管理的顶级文档如下所示:

{
 'filename': 'My JSON info.exp',
 'filecontent': '{"this": "that"}'
}

我想在 vscode 中打开和编辑这些文件。 使用虚拟文档,我可以从自定义树中打开文档,并在以文件名命名的文档中显示文件内容。在我尝试编辑文档内容之前一直运行良好。

我想为文件内容提供一个编辑器,然后使用我的 API 处理诸如保存自己之类的事情。

我查看了 FileSystem Provider,但它看起来不像我正在寻找的东西,因为 uris 必须实际存在......我认为?

有什么提示或建议吗?

【问题讨论】:

    标签: visual-studio-code vscode-extensions


    【解决方案1】:

    我正在尝试对 Joplin 做类似的事情 - 通过 REST API 打开、编辑和保存笔记。

    我没有你那么远,但根据我浏览文档的理解,虚拟文档是只读的。因此,我将我的内容放入 TextDocument 以便可以对其进行编辑;我非常好奇是否有一种方法可以覆盖文档的 onSave() 来做我们都在追求的事情。

    以下是我打开文本文档的操作;如果你能分享任何关于你的进展(或更好的代码)的见解,那就太棒了。

      async openNote(item: Omit<FolderOrNote, 'item'> & { item: JoplinListNote }) {
        console.log('openNote: ', item.id, await 
          noteApi.get(item.id, [
            'id',
            'parent_id',
            'title',
            'is_todo',
            'todo_completed',
            'body'
          ]).then (
              note => {
                vscode.workspace.openTextDocument( {
                  content: note.body,
                  language: 'markdown'
                } ).then(
                    doc => vscode.window.showTextDocument( doc )
                );
              }
            )
          )
      }
    

    编辑:

    挖掘更多,看起来可能需要CustomEditor。 CustomEditor 需要扩展来实现加载和保存到模型中,因为 VS Code 不知道如何处理原始数据。还有一个 CustomTextEditor,但它似乎与本地文件系统相关联。

    这里有一个 YouTube 视频详细讨论了它: https://youtu.be/Dekn2MHy9Os?t=1147

    下面是示例代码: https://github.com/microsoft/vscode-extension-samples/tree/main/custom-editor-sample

    【讨论】:

    • 我最终所做的只是将文件内容保存在本地。然后在我的扩展树中,我添加了一个“提交”命令,该命令将更新服务器上的项目。这使我能够获得类似“git”的界面。我什至可以使用内置的 diff 命令来允许用户结合使用虚拟文档和本地保存的文档,将他们的本地未提交版本与服务器上的版本进行比较。
    猜你喜欢
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 2016-10-28
    • 2017-02-07
    • 2017-03-13
    • 1970-01-01
    相关资源
    最近更新 更多