笔记本,Visual Studio Code 风格
2021 年 11 月 8 日,Tanha Kabir,@_tanhakabir
笔记本是包含富 Markdown 文本、可执行代码片段以及随附的富输出的文档。它们都分隔到不同的单元格中,并且可以按任意顺序交错排列。
如果您不熟悉笔记本,您可能熟悉 REPL (读取-求值-打印循环) 吗?REPL 是一种交互式应用程序,您可以在其中编写几行代码并立即执行代码并查看输出。笔记本是 REPL 的缩影,让您可以快速创建一个环境,您可以在其中迭代并处理小块代码。
笔记本不仅是出色的 REPL,它们还是出色的故事讲述工具,允许您将 Markdown 元素(如图像、数学公式和解释性文本)与代码交错排列。笔记本可以是与同事或公众社区分享和解释您的想法的完美方式。
今天最流行的笔记本形式是 Jupyter Notebook,它在数据科学社区中得到广泛使用,并具有丰富的 Python 支持。Jupyter Notebook 还通过 Jupyter 内核(遵循特定协议以在笔记本中运行代码的可执行文件)支持其他语言,如 Julia 或 R。Visual Studio Code 多年来一直支持 Jupyter Notebook,但最近在 VS Code 核心中添加了原生笔记本支持。
VS Code 中的笔记本支持
没错,笔记本现在是 VS Code 核心功能的一部分!这意味着 VS Code 中现在提供了 笔记本 API,让扩展作者可以创建自己的笔记本体验。任何人都可以制作支持自定义语言和富输出的 VS Code 笔记本扩展,创建笔记本与创建任何其他扩展没有什么不同。
在笔记本 API 之前,VS Code 中的 Jupyter Notebook 支持完全由 Jupyter 扩展 提供。该扩展在隔离的 webview 中创建了其笔记本体验,有点像 VS Code 中的独立网页,无法与您安装的任何其他扩展通信。
然而,现在有了核心的 笔记本 API,笔记本支持来自 VS Code,而不是在隔离的 webview 中。这意味着笔记本扩展可以与 VS Code 的其余部分和其他扩展进行交互。例如,编辑器扩展,如 Rainbow Indent 将在您笔记本的代码单元格中工作。
笔记本 API 不限于 Jupyter Notebook,因为我们相信还有许多其他领域可以从拥有一个工具来帮助您迭代和叙述代码中获益。我们将新的 笔记本 API 公开,供任何扩展作者制作自己的自定义笔记本。
笔记本扩展生态系统的开端
下一节介绍我们在审查笔记本 API 时开发的两个自定义笔记本。
GitHub Issues 笔记本
VS Code 团队创建的第一个笔记本体验是 GitHub Issues 笔记本。它是一个帮助我们分类和组织我们在 GitHub 中拥有的数千个 issue 的笔记本。借助此笔记本,我们可以同时检查多个仓库,以使用诸如“查找所有标记为 bug
并分配给我的 issue”之类的查询来查找 issue。VS Code 团队每天都使用此笔记本处理团队工作的许多仓库中的 issue。
您可以在 VS Code 仓库的 .vscode/notebooks
下找到我们用于分类的特定笔记本。其中一个名为 inbox.github-issues
,用于将新 issue 分类到其适当的区域和受让人。
GitHub Issues 笔记本在 VS Code Marketplace 上提供,供任何人使用。您可以尝试安装该扩展,创建一个文件,其笔记本的文件扩展名为 .github-issues
,例如 my-notebook.github-issues
,然后创建如下查询
$repo=repo:microsoft/vscode-github-issue-notebooks
$repo is:open no:assignee
用于创建查询的笔记本语言 github-issues
与 GitHub.com 上使用的语法几乎相同。GitHub Issues 笔记本语言中的一个补充是,它允许您创建变量并在任何其他单元格中使用它们。
您可以在 GitHub.com 上的此处查看 GitHub Issues 笔记本的源代码。
REST Book
受 GitHub Issues 笔记本中查询体验的启发,当我第一次加入 VS Code 团队时,我创建了 REST Book 作为学习练习。REST Book 允许您在笔记本中进行 HTTP 调用。我发现 REST Book 对于迭代我的服务器项目很有用,因为它能够随着时间的推移进行多次调用,并在一个页面上轻松比较结果。我还使用 REST Book 笔记本设置了一些项目的手动测试,文档与测试用例交错排列。
此 REST Book 扩展程序今天也在 Marketplace 上提供。您可以安装 REST Book 扩展,创建一个以 .restbook
结尾的文件,然后执行任何 HTTP 查询,如 GET github.com
。
最初,开发 REST Book 对我来说似乎很复杂,但是由于有大量的 VS Code API 可用,因此编程和创建 REST Book 比我预期的要容易得多。最值得注意的是,我大量使用了语言 API 来为我的自定义 REST 查询语言进行语法突出显示和自动完成。然后,使用笔记本 API,我只需要填写用户想要运行查询时应该执行的操作即可。
对于这两个笔记本,拥有 VS Code 笔记本 UI 来创建这些类似 REPL 的体验真是太好了。您无需担心创建和维护自己的 UI,只需专注于功能即可。
制作您自己的自定义笔记本扩展
观看编码教程
VS Code 团队在几个月前录制了一个关于自定义笔记本的直播,在直播中,我通过一个实时编码演示展示了创建自定义笔记本扩展是什么样的。您可以在 YouTube 上观看:VS Code 笔记本:深入探讨。自视频发布以来,一些笔记本 API 发生了变化,但原理仍然相同。
当您准备构建自己的笔记本扩展时,要获得最新和最详细的信息,您可以参考 笔记本扩展作者指南。
与社区分享您的想法
如果您对创建自己的笔记本扩展不感兴趣,但对有用的应用程序有想法,我们鼓励您在 VS Code Twitter 帐户 @code 上发布关于笔记本想法的推文,或在 VS Code GitHub 存储库中创建 issue。这将使 VS Code 社区阅读和讨论您的笔记本想法,并有望激励人们将您的笔记本变为现实!
我们在这篇博客中介绍的几个自定义笔记本仅仅是开始!我们很高兴看到您将启发和创造什么样的自定义笔记本体验!
编码愉快!
Tanha Kabir (@_tanhakabir) ,以及 VS Code 团队 (@code)