vscode 扩展中的可编辑虚拟文档
vscode Editable Virtual Documents in Extensions
我正在尝试使用 vscode 编写一个与我的后端服务交互的扩展。
我遇到的问题是我要编辑的“文档”实际上是嵌套的 JSON 文档。例如,我正在管理的顶级文档看起来像这样:
{
'filename': 'My JSON info.exp',
'filecontent': '{"this": "that"}'
}
我想在 vscode 中打开和编辑这些文件。
使用虚拟文档,我可以从自定义树中打开文档,并在以文件名命名的文档中显示文件内容。在我尝试编辑文档内容之前一直运行良好。
我想为文件内容提供一个编辑器,然后使用我的 API.
处理诸如保存自己之类的事情
我查看了 FileSystem Provider,但它看起来不像我正在寻找的东西,因为 uris 必须实际存在...我认为?
有什么提示或建议吗?
我正在尝试做与 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
我正在尝试使用 vscode 编写一个与我的后端服务交互的扩展。 我遇到的问题是我要编辑的“文档”实际上是嵌套的 JSON 文档。例如,我正在管理的顶级文档看起来像这样:
{
'filename': 'My JSON info.exp',
'filecontent': '{"this": "that"}'
}
我想在 vscode 中打开和编辑这些文件。 使用虚拟文档,我可以从自定义树中打开文档,并在以文件名命名的文档中显示文件内容。在我尝试编辑文档内容之前一直运行良好。
我想为文件内容提供一个编辑器,然后使用我的 API.
处理诸如保存自己之类的事情我查看了 FileSystem Provider,但它看起来不像我正在寻找的东西,因为 uris 必须实际存在...我认为?
有什么提示或建议吗?
我正在尝试做与 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